मैं एक बड़े क्यूएमएल कोडबेस में नया हूं और मैं क्यूएमएल तत्व के गुणों को जानना चाहता हूं, जिसे मैं एप्लिकेशन चलाते समय क्लिक करता हूं, उदा। वस्तु का नाम

उदा. इसमें नाम "बटन" main.qml

Qt में समतुल्य QApplication::widgetAt() या QWidget::childAt() है जिसे मैं QMouseEvent में कॉल कर सकता हूं।

मुझे ककड़ी-सीपीपी चरण कार्यान्वयन के लिए मिश्रित क्यूटी/क्यूएमएल एप्लिकेशन के भीतर क्यूएमएल ऑब्जेक्ट्स की पहचान करने की आवश्यकता है, जहां मेरे पास पहले से ही Helper::click(QString name) है। मैंने यहां एक उदाहरण प्रोजेक्ट रखा है: https://github.com/elsamuko/qml_demo

-1
elsamuko 28 जिंदा 2021, 14:00

2 जवाब

सबसे बढ़िया उत्तर

मेरे पास एक समाधान है, जिसके साथ मैं काम कर सकता हूं।
पहले मैं एक व्युत्पन्न वर्ग में mousePressEvent से QQuickView लागू करता हूं।
फिर findChildren<QObject*> के साथ QQuickView ऑब्जेक्ट पर, मैं QML ऑब्जेक्ट्स को ढूंढ और डिबग कर सकता हूं। अजीब तरह से, childAt और children QML चाइल्ड ऑब्जेक्ट्स को सूचीबद्ध नहीं करते हैं।

void ClickView::mousePressEvent( QMouseEvent* ev ) {

    QObjectList children = this->findChildren<QObject*>( QRegularExpression( ".+" ) );

    for( QObject* child : children ) {

        // only search for QML types
        if( !strstr( child->metaObject()->className(), "_QMLTYPE_" ) ) { continue; }

        QVariant vX = child->property( "x" );
        QVariant vY = child->property( "y" );
        QVariant vW = child->property( "width" );
        QVariant vH = child->property( "height" );

        if( vX.isValid() && vY.isValid() && vW.isValid() && vH.isValid() ) {
            QRect rect( vX.toInt(), vY.toInt(), vW.toInt(), vH.toInt() );

            if( rect.contains( ev->pos() ) ) {
                qDebug() << child;
            }
        }
    }

    QQuickView::mousePressEvent( ev );
}

पूरी परियोजना यहाँ है:
https://github.com/elsamuko/qml_demo

0
elsamuko 10 फरवरी 2021, 20:47

यह कोशिश करो, यह काम करना चाहिए

Rectangle {
    id: item
    signal qmlSignal(msg: string)
    objectName: "rectangle"

    MouseArea {
        anchors.fill: parent
        onClicked: item.qmlSignal("rectangle clicked")
        onDoubleClicked: item.qmlSignal("rectangle double clicked")
        onEntered: item.qmlSignal("mouse entered the rectangle")
        onExited: item.qmlSignal("mouse left the rectangle")
    }
}

यदि यह आपको शोभा नहीं देता है, तो आप QML से एक संकेत भेज सकते हैं और स्लॉट में नाम का पता लगा सकते हैं

QML सिग्नल को C++ स्लॉट से कैसे कनेक्ट करें?

-1
Vahagn Avagyan 7 फरवरी 2021, 15:20