QT Graphics Scene Mouse Propagation
-
26-09-2019 - |
Pergunta
Olá, estou aprendendo qt e estou fazendo o seguinte para adicionar alguns widgets a uma cena gráfica
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);
}
}
Minha classe ProductInfo processa a liberação do mouse e emite um sinal
void ProductInfo::mouseReleaseEvent(QMouseEvent *e)
{
QWidget::mouseReleaseEvent(e);
emit productClicked();
}
O problema é que, depois de adicionar os widgets à cena, eles não recebem mais o evento de lançamento do mouse e não emitem sinal do produto, mas se eu os adicionar à janela principal (não à cena), eles funcionam como esperado. O que estou fazendo errado?
Solução
Eu acredito que você deve ser capaz de receber o MouseReleaseEvent ao seu widget pela QGraphicsScene se adicionar MousePrimevent Event Handler e Call Acep () para o objeto de evento lá. Smth. assim:
void ProductInfo::mousePressEvent(QMouseEvent* event)
{
QWidget::mousePressEvent(event);
event->accept();
}
Espero que isso ajude, considerando
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow