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

我相信您应该能够通过 QGraphicsScene 将 mouseReleaseEvent 发送到您的小部件,如果将添加 mousePressEvent 事件处理程序并在那里为事件对象调用 accept()。嗯。像这样:

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

希望这会有所帮助,问候

于 2010-04-11T21:02:07.780 回答