Qt Graphics Scene鼠标事件传播

时间:2010-04-11 17:10:25

标签: c++ qt qgraphicsview

你好我正在学习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信号但是如果我将它们添加到主窗口(而不是场景)它们按预期工作。我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

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

希望这有帮助,尊重