在Qt中模拟鼠标功能

在Qt中模拟鼠标功能,qt,qt5,qtgui,Qt,Qt5,Qtgui,如何使用键盘上的任意5个键来模拟整个鼠标功能? 鼠标光标移动的前四个键。生成左键单击事件的最后一个键。 光标移动正常。但左键单击不适用于旋转框和组合框。此处caps lock键用于生成左键单击事件 void MainWindow :: keyPressEvent(QKeyEvent *event) { switch(event->key()) { case Qt::Key_CapsLock: QPoint pt(m_pqCursObj->pos

如何使用键盘上的任意5个键来模拟整个鼠标功能? 鼠标光标移动的前四个键。生成左键单击事件的最后一个键。 光标移动正常。但左键单击不适用于旋转框和组合框。此处caps lock键用于生成左键单击事件

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;
    }
}
void主窗口::按键事件(QKeyEvent*event)
{
开关(事件->键())
{
案例Qt::钥匙卡普斯洛克:
QPoint pt(m_pqCursObj->pos().x(),m_pqCursObj->pos().y());
光标().setPos(pt);
QMouseEvent*event1=新的QMouseEvent((QEvent::MouseButtonPress),QPoint(1,1),
Qt::LeftButton,
Qt::LeftButton,
Qt::NoModifier);
QCoreApplication::sendEvent(this,event1);
QMouseEvent*event2=新的QMouseEvent((QEvent::MouseButtonRelease),QPoint(1,1),
Qt::LeftButton,
Qt::LeftButton,
Qt::NoModifier);
QObject*ObjunderPos=static_cast(QApplication::widgetAt(QCursor::pos());
QWidget*QWidget=新的QWidget;
qWidget=(qWidget*)ObjunderPos;
if(ObjunderPos)
{

qDebug()我不确定是否/如何使用Qt事件模拟所有情况下都能正常工作的情况。但是,如果使用操作系统函数模拟鼠标点击,这将非常容易(在中搜索,关于此主题有几个线程)