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

时间:2013-06-13 15:32:04

标签: c++ qt mouseevent

我正试图在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()));
}

然后我使用这个插槽使用custum 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似乎永远不会收到这些事件。有什么可能出错的想法吗?

1 个答案:

答案 0 :(得分:1)

使用 postEvent()发送的事件将发送到事件队列,并在下次运行事件循环时调度。在第一个事件之后你的事件循环停止了吗?尝试调用 QApplication :: processEvents()以确保处理当前队列中的所有事件。