久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用qt寫一個(gè)軟鍵盤

 myallmy 2022-04-27

軟鍵盤通過將多個(gè)ToolButton放在一個(gè)Widget當(dāng)中,,并將按鈕提升為自定義類softKey繼承于QToolButton類,。

步驟:
1、為需要使用到軟鍵盤的控件添加事件過濾器

//添加事件過濾器
ui->account_lineEdit->installEventFilter(this);
ui->password_lineEdit->installEventFilter(this);

//先隱藏軟鍵盤
ui->widget->hide();

2,、重寫eventFilter事件,,判斷當(dāng)前觸發(fā)對(duì)象是否是添加了過濾器的控件,且事件是否是鼠標(biāo)按鈕點(diǎn)擊事件,。是的話,,顯示軟鍵盤,,并將焦點(diǎn)設(shè)置到當(dāng)前控件上。

bool MainWindow::eventFilter(QObject *obj,QEvent *event)
{
    if(obj == ui->account_lineEdit && event->type() == QEvent::MouseButtonPress)
    {
        ui->widget->show();			//顯示軟鍵盤
        ui->account_lineEdit->setFocus();		//設(shè)置焦點(diǎn)
    }
    else if(obj == ui->password_lineEdit && event->type() == QEvent::MouseButtonPress)
    {
        ui->widget->show();
        ui->password_lineEdit->setFocus();
    }

    return QMainWindow::eventFilter(obj,event);
}

3,、若是當(dāng)前控件編輯完畢則隱藏軟鍵盤

//賬號(hào)輸入完畢
void MainWindow::on_account_lineEdit_editingFinished()
{
    ui->widget->hide();
}

//密碼輸入完畢
void MainWindow::on_password_lineEdit_editingFinished()
{
    ui->widget->hide();
}

4,、在自定義按鈕類softKey的槽函數(shù)中判斷當(dāng)前點(diǎn)擊的按鈕文本,定義一個(gè)按鍵事件,,通過postEvent將事件key發(fā)送出去

#include "softkey.h"

softKey::softKey(QWidget *parent):QToolButton(parent)
{
    //為按鈕設(shè)置統(tǒng)一樣式
    QFile qssFile(":/qss/qss.qss");         
    if(qssFile.open(QIODevice::ReadOnly))
        qApp->setStyleSheet(qssFile.readAll());

    connect(this,SIGNAL(clicked(bool)),this,SLOT(echoClicked(bool)));
}

void softKey::echoClicked(bool)
{
    if(this->text() == "backspace")
    {
        //定義一個(gè)事件,,Key_Backspace撤消按鈕
        QKeyEvent *key = new QKeyEvent(QEvent::KeyPress,Qt::Key_Backspace,Qt::NoModifier);

        //通過postEvent將事件key發(fā)送出去
        QApplication::postEvent(QApplication::focusWidget(),key);
    }
    else if(this->text() == "enter")
    {
        QKeyEvent *key = new QKeyEvent(QEvent::KeyPress,Qt::Key_Enter,Qt::NoModifier);

        QApplication::postEvent(QApplication::focusWidget(),key);
    }
    else if(this->text().isEmpty())
    {
        QKeyEvent *key = new QKeyEvent(QEvent::KeyPress,Qt::Key_Space,Qt::NoModifier);

        QApplication::postEvent(QApplication::focusWidget(),key);
    }
    else if(this->text() == "shift")
    {
        QKeyEvent *key = new QKeyEvent(QEvent::KeyPress,Qt::Key_Shift,Qt::NoModifier);

        QApplication::postEvent(QApplication::focusWidget(),key);
    }
    else if(this->text() == "ctrl")
    {
        QKeyEvent *key = new QKeyEvent(QEvent::KeyPress,Qt::Key_Control,Qt::NoModifier);

        QApplication::postEvent(QApplication::focusWidget(),key);
    }
    else if(this->text() == "tab")
    {
        QKeyEvent *key = new QKeyEvent(QEvent::KeyPress,Qt::Key_Tab,Qt::NoModifier);

        QApplication::postEvent(QApplication::focusWidget(),key);
    }
    else if(this->text() == "alt")
    {
        QKeyEvent *key = new QKeyEvent(QEvent::KeyPress,Qt::Key_Alt,Qt::NoModifier);

        QApplication::postEvent(QApplication::focusWidget(),key);
    }
    else
    {
        QKeyEvent *key = new QKeyEvent(QEvent::KeyPress,'w',Qt::NoModifier,this->text());

        //通過postEvent將事件key的文本內(nèi)容發(fā)送出去,QApplication::focusWidget()當(dāng)前窗口中,,有光標(biāo)的控件上
        QApplication::postEvent(QApplication::focusWidget(),key);
    }
}

效果圖:
在這里插入圖片描述

(ctrl鍵,、alt鍵、空格鍵,、shift鍵功能未實(shí)現(xiàn))

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多