Arka plan iş parçacığım var ve iş parçacığı UI'yi güncelleyen bazı yöntemleri çağırıyor (ilerleme çubuklarını göstermek ve metin alanlarında ek bilgi göstermek için).Qt: Arka plan iş parçacığı yenileme UI iş parçacığı
Bazı UI widget değerlerini değiştirirseniz, "Farklı bir iş parçacığının sahip olduğu nesnelere olay gönderilemiyor" onaylama hatası ortaya çıkar.
Forumlara baktığımda, QMetaObject :: invokeMethod yöntemini kullanabileceğimi okudum, ancak yalnızca yukarıda gösterilen aynı hatayı artıran Qt :: DirectConnection bayrağını iletirsem çalışır.
Qt :: QueuedConnection veya Qt :: AutoConnection kullanırsam, invokeMethod false değerini döndürür.
Benim kod şuna benzer:
.h:
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.
}
sen neler olduğunu ya da ben yanlış yapıyorum biliyor musunuz? ya da belki, birisi benim yeni sorunumla başa çıkmak için başka bir yaklaşım önerebilir mi? peşin
sayesinde
Ernesto