0

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

4

1 に答える 1

1

postEvent()を使用して送信されたイベントは、イベント キューに送信され、次にイベント ループが実行されたときにディスパッチされます。最初のイベントの後、イベントループが停止する可能性はありますか? QApplication::processEvents()を呼び出して、現在キューにあるすべてのイベントが処理されることを確認してください。

于 2013-06-13T18:26:53.553 に答える