通过发送键盘按下抬起事件,模拟现实中的按键操作,在此之前,要将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