IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Traitement bloqué pendant une insertion dans un QTextEdit


Sujet :

Qt

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut Traitement bloqué pendant une insertion dans un QTextEdit
    Bonjour,

    J'ai développé une application Desktop qui permet la mise à jour d'une base de données SQL Server. La fenêtre principale contient un élément QTexteEdit dans lequel j'affiche des messages sur l'avancement de la mise à jour.

    Le problème se produit lorsque la fonction d'exécution des commandes de mise à jour de la base est appelée, l'interface est figée et je n'arrive pas à voir les messages d'informations (ils sont contenues dans cette fonction d'exécution de commandes de mise à jour).

    J'ai essayé les QThread mais je n'arrive pas à lier l'objet QTextEdit à un nouveau thread.

    J'ai crée un signal et lié à l'objet QTextEdit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(textEdit, SIGNAL(writeMessage(QString)), this, SLOT(append(QString)));
    mais l'output affiche
    QObject::connect: No such signal QTextEdit::writeMessage(QString)
    QObject::connect: (sender name: 'textEdit')
    QObject::connect: (receiver name: 'frmTheriaUpdater')
    Bien sûr une fois l'exécution des commandes de mise à jour terminée, tous messages sont affichés dans le QTextEdit.

    Est ce que quelqu'un pourrait m'éclaircir comment je peux traiter ce dysfonctionnement. J'utilise Qt 5.4 avec Visual Studio.

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour, a priori ta fonction d'execution des commandes de la mise a jour de la bdd il faut la mettre dans un thread secondaire Qt et emettre des signaux depuis ton thread secondaire(depuis cette fonction)pour mettre à jour ton QTextEdit (ces signaux étant connecté à un slot de l'interface graphique-thread principal- pour mettre à jour ton QTextEdit)
    il ya deux manieres de faire des threads secondaires dans Qt (cf http://doc.qt.io/qt-5/qthread.html) soit en derivant une classe de QThread soit en derivant une classe de QObject et en faisant un moveToThread.
    Remarque: si tu accedes à la bdd aussi depuis ton thread principal il faut dans ce cas utiliser un QMutex (mutex) pour acceder à la bdd depuis ton thread secondaire aussi

  3. #3
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    Merci pour votre réponse.

    J'ai pensé à ça aussi mais déjà , comme vous l'avez déjà deviné, j'appelle la base de données depuis le thread principal. Du coup, ce n'est pas gagné avec les QThread. De plus, il s'agit d'un algorithme intégral de mise à jour. C'est assez difficile de le dissocier (notamment avec la contrainte du temps).

    Je creuse alors avec QMutex et je vous tiens informés.

Discussions similaires

  1. [MySQL] Soucis avec une insertion dans une base
    Par Ludo75 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 27/01/2006, 14h03
  2. [DBF] Comment faire une insertion dans le fichier ?
    Par dor_boucle dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 14/12/2005, 07h46
  3. [Sybase] Temps d'une insertion dans une table
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 14/02/2005, 10h04
  4. Annuler une insertion dans un Trigger
    Par dreamanoir dans le forum Oracle
    Réponses: 2
    Dernier message: 10/01/2005, 13h04
  5. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo