Ho una semplice interfaccia utente modulo che ha uno slot per un pulsante, iniziando un filo:QThread blocco principale
void MainWindow::LoadImage()
{
aThread->run();
}
E il metodo run() si presenta come segue:
void CameraThread::run()
{
qDebug("Staring Thread");
while(1)
{
qDebug("ping");
QThread::sleep(1);
}
}
Quando Faccio clic sul pulsante che chiama LoadImage(), l'interfaccia utente non risponde. Periodicamente vedo il messaggio "ping" come l'output di debug ma l'interfaccia si blocca, non risponde a nulla. Perché il mio thread non funziona separatamente? CameraThread derivata come pubblico QThread Sto usando gcc versione 4.4.3 (Ubuntu 4.4.3-4ubuntu5) con librerie QT e QT Creator da repository Ubuntu 10.04 (x86).
La documentazione QT spiega l'utilizzo di QThread tramite sottoclasse. Perché è una cattiva idea? –
@Atilla - se leggi il link del blog QT nella risposta di Casey, troverai il titolo "Stai sbagliando ...". È una discussione sul perché la documentazione di Qt sulla sottoclasse di QThread non era il modo corretto di fare discussioni.Inoltre, se ho letto correttamente il post di blog, è dalla persona che ha scritto la documentazione Qt originale. –
Sì, è corretto. Fondamentalmente, la documentazione Qt è fuorviante e di conseguenza ha portato molte persone a fare cose hacky (come movetoThread (questo) nel costruttore Qthread) che causano problemi su tutta la linea. Speriamo che i documenti vengano aggiornati a breve. – Casey