您的位置:首页 > 编程语言 > Qt开发

QT 模拟鼠标事件

2017-03-20 15:58 1351 查看
模拟鼠标按键

和模拟键盘按键类似,也是通过发送相应的事件来实现的,安装相应的事件监听器,具体发送事件:

QPoint pos;

pos.setX(88);

pos.setY(58);

QMouseEvent *mEvnPress;

QMouseEvent *mEvnRelease;

mEvnPress = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);

QApplication::sendEvent(QWidget::focusWidget(),mEvnPress);

mEvnRelease = new QMouseEvent(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);

QApplication::sendEvent(QWidget::focusWidget(),mEvnRelease);      

主要的分析函数是:     

QMouseEvent::QMouseEvent ( Type type, const QPoint & position, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers )

参数分析:

The type parameter must be one of QEvent::MouseButtonPress, QEvent::MouseButtonRelease, QEvent::MouseButtonDblClick, or QEvent::MouseMove.

The position is the mouse cursor's position relative to the receiving widget. 

The button that caused the event is given as a value from the Qt::MouseButton enum. If the event type is MouseMove, the appropriate button for this event is Qt::NoButton. 

The mouse and keyboard states at the time of the event are specified by buttons and modifiers.

The globalPos() is initialized to QCursor::pos(), which may not be appropriate. Use the other constructor to specify the global position explicitly.

主要说明:

这里的pos的位置是接受鼠标事件的widget的内部的一个局部位置。也就是说他的鼠标按键的产生点是:先通过

QApplication::sendEvent(QWidget::focusWidget(),mEvnPress);//也就是说先是指明了传递给哪个widget

然后再根据mEventPress来进行具体的再改widget中的定位,以及具体的按键是什么。

bool MainWindow::event(QEvent *e)

{

    if(QEvent::KeyPress == e->type() )

    {

        QMouseEvent *mouseEvent = 0;

        QPoint pos;

        QKeyEvent *event = dynamic_cast<QKeyEvent*>(e);

        if(Qt::Key_F5 == event->key())

        {

            qDebug()<<"simulate mouse left button down";

            pos = this->mapFromGlobal(QCursor::pos());

            mouseEvent = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);

            QApplication::postEvent(this, mouseEvent);

        }

        else if(Qt::Key_F6 == event->key())

        {

            qDebug()<<"simulaite mouse right button donw";

            pos = this->mapFromGlobal(QCursor::pos());

            mouseEvent = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::RightButton, Qt::RightButton, Qt::NoModifier);

            QApplication::postEvent(this, mouseEvent);

        }

    }

    return QFrame::event(e);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: