QT自制软键盘 最完美、最简单、支持中文输入

在现代的用户界面设计中,屏幕键盘是一种重要的辅助工具,特别是在触摸屏设备上。本文将深入解析一个使用Qt框架自制的屏幕键盘,具有丰富的功能和用户友好的界面,支持中文输入、组合键操作等多种特性。

主要功能是模拟一个键盘,用户可以通过点击按钮来输入字符。

点击软键盘,通过QKeyEvent模拟键盘按键事件,并使用QApplication::sendEvent将这些事件发送给当前焦点控件,从而实现虚拟键盘的输入功能。

部分代码:

void frmKeyBoard::initFrm()
{
    ui.pushButton_closeKeyboard->setIcon(style()->standardIcon(QStyle::SP_TitleBarCloseButton));
    m_letterKeys.clear();
    m_numberKeys.clear();
    QList<QPushButton*> pbtns = this->findChildren<QPushButton*>();
    foreach(QPushButton * pbtn, pbtns) {
        pbtn->setAutoRepeat(true);    //允许自动重复
        pbtn->setAutoRepeatDelay(500);//设置重复操作的时延

        if (pbtn->text() >= "a" && pbtn->text() <= "z") {
            connect(pbtn, &QPushButton::clicked, this, &frmKeyBoard::slotKeyLetterButtonClicked);
            m_letterKeys.push_back(pbtn);
        }
        else if ((pbtn->text().toInt() > 0 && pbtn->text().toInt() <= 9) || pbtn->text() == "0") {
            connect(pbtn, &QPushButton::clicked, this, &frmKeyBoard::slotKeyNumberButtonClicked);
            m_numberKeys.push_back(pbtn);
        }
        else{
            connect(pbtn, &QPushButton::clicked, this, &frmKeyBoard::slotKeyButtonClicked);
        }
    }

    m_mapSymbolKeys.insert("~", Qt::Key_AsciiTilde);
    m_mapSymbolKeys.insert("`", Qt::Key_nobreakspace);
    m_mapSymbolKeys.insert("-", Qt::Key_Minus);
    m_mapSymbolKeys.insert("_", Qt::Key_Underscore);
    m_mapSymbolKeys.insert("+", Qt::Key_Plus);
    m_mapSymbolKeys.insert("=", Qt::Key_Equal);
    m_mapSymbolKeys.insert(",", Qt::Key_Comma);
    m_mapSymbolKeys.insert(".", Qt::Key_Period);
    m_mapSymbolKeys.insert("/", Qt::Key_Slash);
    m_mapSymbolKeys.insert("<", Qt::Key_Less);
    m_mapSymbolKeys.insert(">", Qt::Key_Greater);
    m_mapSymbolKeys.insert("?", Qt::Key_Question);
    m_mapSymbolKeys.insert("[", Qt::Key_BracketLeft);
    m_mapSymbolKeys.insert("]", Qt::Key_BracketRight);
    m_mapSymbolKeys.insert("{", Qt::Key_BraceLeft);
    m_mapSymbolKeys.insert("}", Qt::Key_BraceRight);
    m_mapSymbolKeys.insert("|", Qt::Key_Bar);
    m_mapSymbolKeys.insert("\\", Qt::Key_Backslash);
    m_mapSymbolKeys.insert(":", Qt::Key_Colon);
    m_mapSymbolKeys.insert(";", Qt::Key_Semicolon);
    m_mapSymbolKeys.insert("\"", Qt::Key_QuoteLeft);
    m_mapSymbolKeys.insert("'", Qt::Key_Apostrophe);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值