gpt4 book ai didi

c++ - 无法在某些小部件上触发鼠标事件

转载 作者:行者123 更新时间:2023-11-28 07:34:02 28 4
gpt4 key购买 nike

我试图在 QPushButtons 上触发虚假的点击事件。

ButtonsMap::ButtonsMap()
{

m_b1 = new QPushButton("push me 1", this);
m_b2 = new QPushButton("push me 2", this);
m_b3 = new QPushButton("push me 3", this);
m_b1->move(0,0);
m_b2->move(0,40);
m_b3->move(0,80);
connect(m_b1, SIGNAL(clicked()), this, SLOT(setclicked1()));
connect(m_b2, SIGNAL(clicked()), this, SLOT(setclicked2()));
connect(m_b3, SIGNAL(clicked()), this, SLOT(setclicked3()));
}

然后我使用这个插槽通过自定义 TouchEvent 类(不是 QTouchEvent,从头开始的东西)触发它们

void TouchToMouse::NewTouchEvent(const TouchEvent& e ) {
...

QWidget *target = clickTarget(m_mw, pos);
switch (e.m_type) {
case APPEAR:
event = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
break;
case MOVE:
event = new QMouseEvent(QEvent::MouseMove, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
break;
case DISAPPEAR:
event = new QMouseEvent(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
break;
}

QApplication::postEvent(target, event);*

}

我的问题是:它有效,但仅适用于第一个按钮 m_b1,即使 QWidget *target 指向正确的小部件(我检查了地址)。似乎 m_b2m_b3 从未接收到这些事件。知道可能出了什么问题吗?

最佳答案

使用 postEvent() 发送的事件被发送到事件队列并在下次事件循环运行时分派(dispatch)。是否有可能在第一个事件之后以某种方式停止您的事件循环?尝试调用 QApplication::processEvents() 以确保当前队列中的所有事件都得到处理。

关于c++ - 无法在某些小部件上触发鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091126/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com