在 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 的所有鼠标和键盘事件?

Qt(Ubuntu)怎么实现模拟鼠标事件和键盘事件?

模拟鼠标释放 Pyqt

向父母发出传播模拟鼠标事件(拖动目的)的问题

Qt keyPressEvent、“Hold”和keyReleaseEvent处理按钮/鼠标点击

在 Vimperator 插件中模拟鼠标悬停