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?

Foi útil?

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
scroll top