QProgressbar.setValue in einer Qtconncurrent Thread aufrufen



  • Hallo Leute,

    ich kämpfe mich grad bissel durch die C++ QT Welt;)

    Nun habe ich folgendes Problem: Ich habe ein MyWidget, diese hat einen Button dessen clicked() Singnal
    an eine lokale Solt gebunden ist, darin rufe ich :

    QFuture<void> future = QtConcurrent::run(this, &MyWidget::reloadData);
    

    auf. Meine MyWidget auch einen QProgressBar, und wollte in der asynchronen Methode:

    _progressBar->setValue(_progressBar->value() +1);
    

    aufrunfen, aber das geht wohl nicht weil die Object in unterschiedlichen Threads sind.

    hab gelesen ich kann "moveToThread" verwenden, aber ich habe keine Ahnung wie ich das machen soll.

    Vll. Habt Ihr ja nen Tipp?;)



  • setValue ist ein Slot. Du kannst also ein Signal definieren, den Slot damit verbinden und dden Wert damit setzten. Signal/Slot funktioniert zwischen vershciedenen Threads.



  • Hallo Dankte für deinen Tip, habe es mit :

    QMetaObject::invokeMethod(this, "updateProgressBar", Qt::QueuedConnection, Q_ARG(int, ++progress));
    
    

    ist wohl das aquivalent to .NET UI.Dispatcher.Invoke:)


Anmelden zum Antworten