Vous ne devriez pas utiliser votre exemple directement dans un autre thread. Cependant, il n'est pas trop difficile de travailler les choses dans une bonne forme en utilisant des signaux et des slots.
class UpThread : public QThread
{
Q_OBJECT
...
public slots:
void countUp()
{
for (int i = 0; i < 100; ++i)
{
emit (newText(QString::number(i)));
sleep(1);
}
}
signals:
void newText(QString text);
}
class DownThread : public QThread
{
Q_OBJECT
...
public slots:
void countDown()
{
for (int i = 100; i > 0; --i)
{
emit (newText(QString::number(i)));
sleep(1);
}
}
signals:
void newText(QString text);
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow window;
UpThread up;
DownThread down;
QObject::connect(window.buttonUp, SIGNAL(clicked()), &up, SLOT(countUp()));
QObject::connect(&up, SIGNAL(newText(QString)), &window.textEntry, SLOT(setText(QString)));
QObject::connect(window.buttonDown, SIGNAL(clicked()), &down, SLOT(countDown()));
QObject::connect(&down, SIGNAL(newText(QString)), &window.textEntry, SLOT(setText(QString)));
window.show();
up.run();
down.run();
return (app.exec());
}
Note: Je n'ai pas compilé ou testé ce point. Haut et bas ne se soucient pas si l'autre est en cours d'exécution, donc si vous cliquez sur les deux boutons, votre entrée de texte peut sauter partout. J'ai évidemment omis beaucoup de choses. J'ai également ajouté un sleep(1)
à chaque boucle pour montrer qu'ils ne devraient pas bloquer l'interface utilisateur principale.
Quelle est la version qt utilisez-vous? –