Qt: Un widget qui affichera caractère par caractère (durée)
Fermé
isane_8166
Messages postés
3
Date d'inscription
samedi 5 juin 2021
Statut
Membre
Dernière intervention
14 juin 2022
-
14 juin 2022 à 00:48
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 29 juin 2022 à 15:55
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 29 juin 2022 à 15:55
A voir également:
- Afficher caractères non imprimables google doc
- Qt sdk - Télécharger - Langages
- Qt tab bar - Télécharger - Personnalisation
- Qt web - Télécharger - Navigateurs
- Qlabel qt ✓ - Forum Programmation
- Qt messagebox ✓ - Forum C++
1 réponse
mamiemando
Messages postés
33407
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
29 novembre 2024
7 806
Modifié le 29 juin 2022 à 16:01
Modifié le 29 juin 2022 à 16:01
Bonjour,
Qt (au même titre que n'importe quelle bibliothèque permettant de faire un interface graphique comme GTK ou tk) fonctionne de manière asynchrone, or raisonner avec
En Qt, la classe qu'il te faut est probablement
Il te suffirait donc d'en adapter le contenu de cette dernière méthode pour faire ce que tu veux (dans ton cas, afficher ta chaîne caractère par caractère).
Si je reprends cet exemple, ton code pourrait ressembler à :
MyTimer.hpp
MyTimer.cpp
main.cpp
Note : je mets les
Bonne chance
Qt (au même titre que n'importe quelle bibliothèque permettant de faire un interface graphique comme GTK ou tk) fonctionne de manière asynchrone, or raisonner avec
sleeprevient à raisonner de manière synchrone. C'est donc inadapté. En asynchrone, on rattrape des événements, et en l'occurrence, il te faut quelque chose qui lève un événement à instant réguliers (par exemple chaque seconde).
En Qt, la classe qu'il te faut est probablement
QTimer. Dans l'exemple fourni, le timer expire toutes les secondes et déclenche un appel à la méthode
MyTimerSlotde classe
MyTimer.
Il te suffirait donc d'en adapter le contenu de cette dernière méthode pour faire ce que tu veux (dans ton cas, afficher ta chaîne caractère par caractère).
Si je reprends cet exemple, ton code pourrait ressembler à :
MyTimer.hpp
#ifndef MYTIMER_H #define MYTIMER_H #include <string> // #include <QString> si tu préfères utiliser QString plutôt que std::string #include <QTimer> class MyTimer : public QObject { Q_OBJECT public: std::string message; // Ajout, tu peux aussi utiliser QString si tu préfères unsigned compteur; // Ajout MyTimer(const std::string & message); ~MyTimer(); // Manquant QTimer *timer; public slots: void MyTimerSlot(); }; #endif // MYTIMER_H
MyTimer.cpp
#include "MyTimer.hpp" #include <QDebug> // On adapte aussi le constructeur MyTimer::MyTimer(const std::string & message): message(message), compteur(0) { timer = new QTimer(this); connect(this->timer, SIGNAL(timeout()), this, SLOT(MyTimerSlot())); this->timer->start(1000); } MyTimer::~MyTimer(){ delete this->timer; // Manquant : qui dit new dit delete } void MyTimer::MyTimerSlot() // Adapté { qDebug() << this->message.substr(0, this->compteur); if (this->compteur < this->message.size()) { this->compteur++; } }
main.cpp
#include <QCoreApplication> #include "MyTimer.hpp" int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); MyTimer timer; return app.exec(); }
Note : je mets les
this->pour insister sur le fait que l'on parle d'un attribut de l'instance à laquelle la méthode considérée est appliquée, mais tu peux sous-entendre les
this->si c'est clair pour toi (c'est équivalent et plus concis).
Bonne chance