2010-04-11 4 views
0

привет я учусь кварты и я делаю на следующей, чтобы добавить некоторые виджеты в графической сценуQt График Scene мыши распространение события

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, но если я добавлю их в главное окно (а не на сцену), они будут работать должным образом. Что я делаю не так?

ответ

0

Я считаю, что вы должны получить mouseReleaseEvent, отправленный вашему виджету QGraphicsScene, если бы добавил обработчик события mousePressEvent и вызывал accept() для объекта события. Что-л. как это:

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

надеюсь, что это помогает, считает

+0

спасибо, что был на месте только один вопрос, как сделали вы пришли к такому выводу, так что в следующий раз, когда я могу сделать это самостоятельно. Еще раз спасибо брату. – Olorin

+0

Я взглянул на исходный код QGraphicsProxyWidgetPrivate :: sendWidgetMouseEvent, чтобы увидеть, как события мыши обрабатываются графическим изображением виджета –

+0

Еще раз спасибо брату, которого вы рок :) – Olorin