在 Qt 中模拟鼠标功能
Posted
技术标签:
【中文标题】在 Qt 中模拟鼠标功能【英文标题】:Simulate Mouse Functionality in Qt 【发布时间】:2014-09-24 05:20:51 【问题描述】:如何使用键盘上的任意 5 个键来模拟整个鼠标功能? 鼠标光标移动的前四个键。生成左键单击事件的最后一个键。 光标移动正常工作。但是左键单击不适用于旋转框和组合框。这里大写锁定键用于生成左键单击事件。
void MainWindow :: keyPressEvent(QKeyEvent *event)
switch(event->key())
case Qt::Key_CapsLock:
QPoint pt(m_pqCursObj->pos().x(),m_pqCursObj->pos().y());
cursor().setPos(pt);
QMouseEvent * event1 = new QMouseEvent ((QEvent::MouseButtonPress), QPoint(1,1),
Qt::LeftButton,
Qt::LeftButton,
Qt::NoModifier);
QCoreApplication::sendEvent(this,event1);
QMouseEvent * event2 = new QMouseEvent ((QEvent::MouseButtonRelease), QPoint(1,1),
Qt::LeftButton,
Qt::LeftButton,
Qt::NoModifier);
QObject * ObjunderPos = static_cast<QObject*>(QApplication::widgetAt(QCursor::pos()));
QWidget * qWidget = new QWidget;
qWidget = (QWidget *)ObjunderPos;
if(ObjunderPos)
qDebug()<<"Qobject";
if (qobject_cast<QLineEdit*>(qWidget))
qWidget->setFocus();
QCoreApplication::sendEvent(ObjunderPos,event1);
QCoreApplication::sendEvent(ObjunderPos,event2);
break;
【问题讨论】:
【参考方案1】:我不确定您是否/如何使用 Qt 事件以在所有情况下都有效的方式来模拟它。不过如果你用操作系统的函数来模拟鼠标点击,那就很简单了(在SO里搜一下,这个话题有好几个帖子了)。
【讨论】:
以上是关于在 Qt 中模拟鼠标功能的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Qt 中模拟适用于 Linux 和 Windows 的所有鼠标和键盘事件?