Qt软键盘-发送按键事件

通过发送键盘按下抬起事件,模拟现实中的按键操作,在此之前,要将ui界面的 按钮的focusPolicy属性设置成NoFocus,这样鼠标点击它的时候就不会获取焦点,也可以用代码设置

ui->pushButton_1->setFocusPolicy(Qt::NoFocus)

发送按键事件到当前聚焦的窗体。

1.获取当前聚焦的QWidget

QWidget *receiver = QApplication::focusWidget();
qDebug()<<"Send key event to focus widget "<<receiver->objectName();

qDebug()<<"Send key event to focus widget "<<receiver->objectName();

2.装载press与release事件

key为按键键值(整型);

value为按键实际值(QString).

QKeyEvent keyPress(QEvent::KeyPress,     key, Qt::NoModifier, value);
QKeyEvent keyRelease(QEvent::KeyRelease, key, Qt::NoModifier, value);

3.发送按键事件

QApplication::sendEvent(receiver, &keyPress);
QApplication::sendEvent(receiver, &keyRelease);

https://cloud.tencent.com/developer/article/1463676

===========================

//模拟键盘按键1

void Widget::on_pushButton_9_clicked()
{
    QWidget *receiver = QApplication::focusWidget();
    QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_1, Qt::NoModifier, QString("1"));
    QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_1, Qt::NoModifier, QString("1"));
    QApplication::sendEvent(receiver, &keyPress);
    QApplication::sendEvent(receiver, &keyRelease);
}

https://blog.csdn.net/qq_41632571/article/details/125808787

===========================

五、模拟键盘点击事件完成虚拟键盘输入

一些自制虚拟键盘完成键盘输入的方式是同传递文本到输入框的方式,话不多说,就是不nice。点击虚拟按键直接发送对应的按键点击事件就很nice,这样其实就不会太死,甚至中文输入也可以,我们写的是键盘,不是写中文输入法,那些下载网上含有中文输入法的库的大可不必,输入法你系统用的什么就是什么。如果你想中文输入,系统下载的有搜狗输入法,你的键盘只需按下ctrl+shift切换输入法即可,而不是在键盘里实现中文输入法的功能。那样不nice,模拟发送按键点击事件代码如

QPushButton* pbtn = (QPushButton*)sender();
if (pbtn->text() >= 'a' && pbtn->text() <= 'z') {
QKeyEvent keyPress(QEvent::KeyPress, int(pbtn->text().at(0).toLatin1()) - 32, Qt::NoModifier, pbtn->text());
QKeyEvent keyRelease(QEvent::KeyRelease, int(pbtn->text().at(0).toLatin1()) - 32, Qt::NoModifier, pbtn->text());
QApplication::sendEvent(m_focusWidget->focusWidget(), &keyPress);
QApplication::sendEvent(m_focusWidget->focusWidget(), &keyRelease);
}

原文链接:https://blog.csdn.net/qq_41632571/article/details/125808787

引用 3 楼 foruok 的回复:

使用 sendEvent ,类似这样:
 QKeyEvent leftKey(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier);
 QCoreApplication::sendEvent(your_widget, &leftKey);
使用 postEvent ,类似这样:
 QKeyEvent *leftKey = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier);
 QCoreApplication::postEvent(your_widget, leftKey);

https://bbs.csdn.net/topics/390840193

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值