Bonjour,

je suis en train de développer un logiciel et j'ai quelques soucis entre la gui et le chargement d'une vidéo qui peut prendre quelques secondes à cause d'éléments d'initialisation.
Je voudrais pouvoir afficher un BusyIndicator le temps que ma vidéo se charge pour indiquer à l'utilisateur que tout va bien et qu'il faut juste qu'il soit un peu patient.
Sauf que tout ne fonctionne pas exactement comme je le souhaite.

J'ai donc un fichier qml
Code qml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Rectangle {
    id : videoDisplay
...
    BusyIndicator{
         id: busyIndicator
         anchors.centerIn: parent
         running: false
    }
 
    VideoManager{ // classe C++ pour gérer l'affichage de ma vidéo - détaillé ci-dessous
       id: videomanager
       onPathChanged{ // changement de chemin
              busyIndicator.running = true;
              videomanager.loading(); // chargement de la vidéo
       }

et une classe C++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class VideoManager : public QQuickPaintedItem
{
 
    Q_OBJECT
public:
     VideoManager(QQuickItem *parent=0)
     ...
    Q_INVOKABLE  void loading();
public slots:
    void initialize();
    ...
};
 
VideoManager::VideoManager(QQuickItem *parent) :
    QQuickPaintedItem(parent),
...{
...
}
 
 
void VideoManager::loading(){
        ... // chargement de divers éléments et mise en connection de signaux variés
 
        QThread *thread = new QThread();
        moveToThread(thread);
        connect(thread, SIGNAL(started()), this, SLOT(initialize()));
        connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
        thread->start();
 
       ...
}    
 
void VideoManager::initialize(){
       if(myVideoReader_->initialize()){ // tout est bon
            QObject::connect(myVideoReader_, SIGNAL(updateDisplay()), this, SLOT(onUpdateDisplay())); // connexion de l'affichage
            ...
            emit okSignal();
       }
       else{
           ...
           emit koSignal();
       }
}
Pourquoi je mets ma fonction initialize dans un thread? Car sinon mon interface graphique est bloqué et je n'ai pas mon busyindicator actif.
J'ai essayé un QConcurrent::run sans grand succès (j'ai d'ailleurs un problème d'accès aux attributs de ma classe quand je les utilise).

Ma question est comment faire pour résoudre ce soucis de thread car parfois ça marche et parfois ça ne marche pas mais j'ai toujours le Warning: QObject::moveToThread: Cannot move objects with a parent
Ce qui veut dire que ce que j'ai écrit est un correct or je ne vois pas trop comment résoudre cette gestion de l'héritage et de thread.

Merci de toute l'aide et explication que vous pourriez m'apporter
L'elfe d'Azur