0

こんにちは私はqtを学んでいて、グラフィックシーンにいくつかのウィジェットを追加するために次のことをしています

void MainWindow::addWidgets(QList<QWidget *> &list, int code)
{
    if(code == CODE_INFO)
    {
        QWidget *layoutWidget = new QWidget();
        QVBoxLayout *layout = new QVBoxLayout();
        foreach(QWidget *w, list)
        {
            layout->addWidget(w);
            this->connect(((ProductInfo*)w), SIGNAL(productClicked()), this, SLOT(getProductDetails()));
        }
        layoutWidget->setLayout(layout);
        this->scene->addWidget(layoutWidget);
    }
}

私のProductInfoクラスはマウスのリリースを処理し、シグナルを発します

void ProductInfo::mouseReleaseEvent(QMouseEvent *e)
{
    QWidget::mouseReleaseEvent(e);
    emit productClicked();
}

問題は、ウィジェットをシーンに追加した後、マウスリリースイベントを取得せず、productClickedシグナルを出力しないことですが、ウィジェットをメインウィンドウ(シーンではなく)に追加すると、期待どおりに機能します。私は何が間違っているのですか?

4

1 に答える 1

1

mousePressEventイベントハンドラーを追加し、そこでイベントオブジェクトに対してaccept()を呼び出す場合は、QGraphicsSceneによってmouseReleaseEventをウィジェットに送信できるはずです。Smth。このような:

void ProductInfo::mousePressEvent(QMouseEvent* event)
{
    QWidget::mousePressEvent(event);
    event->accept();
}

これがお役に立てば幸いです

于 2010-04-11T21:02:07.780 に答える