Qt 模拟鼠标事件-在两个按钮之间切换

    if(m_last_state)
        QCursor::setPos(this->mapToGlobal(QPoint(172, 309)));//按钮1的位置
    else
        QCursor::setPos(this->mapToGlobal(QPoint(400, 110)));//按钮2的位置
    m_last_state = !m_last_state;

    QPointF *qp = new QPointF(0, 0);
    QMouseEvent *event1 = new QMouseEvent(QEvent::MouseButtonPress, *qp, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
//    QApplication::sendEvent(QApplication::focusWidget(), event1);
    QCoreApplication::postEvent(QApplication::focusObject(), event1);

    QMouseEvent *event2 = new QMouseEvent(QEvent::MouseButtonRelease, *qp, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
//    QApplication::sendEvent(QApplication::focusWidget(), event2);
    QCoreApplication::postEvent(QApplication::focusObject(), event2);

sendEvent 是发送事件函数,第一个参数是接收该事件的元对象,第二个参数是要发送的事件;
使用postEvent时必须是QKeyEvent *类型变量,如果是sendEvent则可以QKeyEvent类型变量。

sendEvent的事件派发不通过事件循环。QApplication::sendEvent()是通过调用QApplication::notify(),直接进入了事件的派发和处理环节,是同步的。
sendEvent与postEvent的使用
两个函数都是接受一个 QObject * 和一个 QEvent * 作为参数。
postEvent 的 event 必须分配在 heep 上。用完后会被Qt自动删除
sendEvent 的 event 必须分配在 stack 上。


QMouseEvent用来构造一个模拟的鼠标事件,构造函数中定义了事件的类型为按压或者是释放,pos参数是用来指定在接收该事件的元对象的事件发生位置,例子中就是指定了在两个按钮的之间切换 分别接收按钮位置的点击事件;
QPos定义位置。

对于QLineEdit这种部件,可以通过setFocus()函数先让部件获得焦点,再把sendEvent()中的接收对象换成QWidget::focusWidget();

注意:如果只对某一个按钮或者部件发送事件可以直接在sendEvent函数中第一个参数中制定,例如

QApplication::sendEvent(my_PushButton1, event2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ppipp1109

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值