मेरे पास पृष्ठभूमि थ्रेड है और थ्रेड यूआई को अपडेट करने के कुछ तरीकों को कॉल करता है (प्रगति सलाखों को दिखाने के लिए और टेक्स्ट क्षेत्रों में अतिरिक्त जानकारी दिखाने के लिए)।क्यूटी: पृष्ठभूमि थ्रेड रीफ्रेशिंग यूआई थ्रेड
यदि मैं कुछ यूआई विजेट मान संशोधित करता हूं, तो "एक अलग थ्रेड के स्वामित्व वाले ऑब्जेक्ट्स पर ईवेंट नहीं भेज सकता" दावा त्रुटि उठाई जाती है।
फ़ोरम देख रहे हैं, मैंने पढ़ा है कि मैं QMetaObject :: invokeMethod विधि का उपयोग कर सकता हूं लेकिन यह केवल काम करता है अगर मैं इसे Qt :: DirectConnection ध्वज पास करता हूं जो वास्तव में ऊपर दिखाए गए एक ही त्रुटि को उठाता है।
यदि मैं Qt :: QueuedConnection या Qt :: AutoConnection का उपयोग करता हूं, तो invokeMethod गलत लौटाता है।
मेरे कोड इस जैसा दिखता है:
ज:
class A : public QMainWindow
{
Q_OBJECT
QProgressBar* pb;
public slots:
bool m(bool, int);
};
class B
{
A* a;
public:
void handleEvent();
};
.cpp:
bool A::m(bool x, int y)
{
pb->setValue(y);
return x;
}
void B::handleEvent()
{
//a->m(true, 12); //raises an assertion error
bool r;
//bool ret = QMetaObject::invokeMethod(a, "m", Qt::DirectConnection, Q_RETURN_ARG(bool, r), Q_ARG(bool, true), Q_ARG(int, 12)); //raises the same assertion error error
bool ret = QMetaObject::invokeMethod(a, "m", Qt::AutoConnection, Q_RETURN_ARG(bool, r), Q_ARG(bool, true), Q_ARG(int, 12)); //is ignored and ret contains false.
}
तुम्हें पता है क्या हो रहा है या मैं गलत क्या कर रहा हूँ है? या शायद, क्या कोई मेरी नौसिखिया समस्या से निपटने के लिए मुझे एक और दृष्टिकोण सुझा सकता है?
अग्रिम धन्यवाद,
अर्नेस्टो