在Qt中模拟鼠标功能

时间:2014-09-24 05:20:51

标签: qt qt5 qtgui

如何使用键盘上的任意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 个答案:

答案 0 :(得分:0)

我不确定是否/如何使用Qt事件以适用于所有情况的方式模拟此事件。但是,如果您使用操作系统函数模拟鼠标单击,那将非常简单(在SO中搜索,有关于此主题的几个主题)。