Pregunta

hola estoy aprendiendo qt y yo estoy haciendo el folowing añadir algunos widgets a una escena de gráficos

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);
    }
}

mi clase ProductInfo procesos de liberación del ratón y emite una señal

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

El problema es después de añadir los widgets a la escena que ya no reciben el evento de lanzamiento del ratón y no emiten señal productClicked pero si los agrego a la ventana principal (no a la escena) que funcionan como se esperaba. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Creo que debe ser capaz de obtener mouseReleaseEvent enviada a su widget haciendo QGraphicsScene si se sumaría controlador de eventos mousePressEvent y aceptación de llamada () para el objeto de evento allí. Smth. de esta manera:

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

Espero que esta ayuda, respecto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top