سؤال

مرحبًا ، أنا أتعلم 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();
}

تكمن المشكلة في إضافة الحاجيات إلى المشهد ، لم تعد تحصل على حدث إصدار الماوس ولا ينبعثون من الإشارة التي تم تحديدها ، ولكن إذا قمت بإضافتها إلى النافذة الرئيسية (وليس إلى المشهد) ، فإنها تعمل كما هو متوقع. ما الخطأ الذي افعله؟

هل كانت مفيدة؟

المحلول

أعتقد أنك يجب أن تكون قادرًا على إرسال MousereleAseevent إلى عنصر واجهة المستخدم الخاصة بك بواسطة QGraphicsScene إذا كانت ستضيف معالج حدث Mousepressevent و Call Accept () لكائن الحدث هناك. SMTH. مثله:

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

أتمنى أن يساعد هذا ، تحياتي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top