Hallo,
Sagen wir ich will 100 Bilder erzeugen in 4 Threads und den Fortschritt per QProgressdialog darstellen, wie muß ich das machen. Gefunden habe ich nur Beispiele mit QTConcurrent::map, aber das wäre ja wohl eher etwas wenn ich 100 Bilder in 100 Threads starten will, Außerdem wird bei dem Bsp soweit ich es verstanden habe als Fortschritt der Abschluß jeweils eines Threads angezeigt. Ich will aber aus den Threads heraus das Label und den Value verändern.
Gruß
Dimitri
QProgressDialog und QtConcurrent::run
-
DimitriJunker
- Beiträge: 47
- Registriert: 8. September 2014 12:12
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QProgressDialog und QtConcurrent::run
Wenn ein Bild fertig ist, aus dem Thread heraus ein Signal senden und dieses auswerten um den ProgressDialog zu aktualisieren.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
DimitriJunker
- Beiträge: 47
- Registriert: 8. September 2014 12:12
Re: QProgressDialog und QtConcurrent::run
Ja soweit war ich auch schon, aber wie ich das machen soll ist mir noch nicht klar.
In den Threads erzeuge ich mit emit ein Signal. Im Hauptthread habe ich einen Slot, aber dann braucht man ja noch die Verbindung. Dazu dient ja connect, aber erstens wo kommt das connect hin und zweitens :
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) [static]
was trage ich als Sender ein? mit QTConcurrent::run rufe ich doch eine externe Funktion auf, die ist also kein QObject. Genauer: der Aufruf sieht so aus:
Und die Funktion:
Danke im vorraus
Dimitri
In den Threads erzeuge ich mit emit ein Signal. Im Hauptthread habe ich einen Slot, aber dann braucht man ja noch die Verbindung. Dazu dient ja connect, aber erstens wo kommt das connect hin und zweitens :
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) [static]
was trage ich als Sender ein? mit QTConcurrent::run rufe ich doch eine externe Funktion auf, die ist also kein QObject. Genauer: der Aufruf sieht so aus:
Code: Alles auswählen
void MainW::makePmap()
{
...
for(int threadNr=0;threadNr<data->m_maxThreads;threadNr++)
QtConcurrent::run(loadPMapInThread,data);
...
}
Code: Alles auswählen
void loadPMapInThread( SDLM_DATA * data )
{
...
}
Dimitri
-
DimitriJunker
- Beiträge: 47
- Registriert: 8. September 2014 12:12
Re: QProgressDialog und QtConcurrent::run
Hallo,
nach langer Suche und einer parallelen Frage im englischen Forum habe ich von QtConcurent::run auf QtConcurent::map umgestellt, dazu gibt es Beispiele wie man es mit QProgressDialog verknüpft. Was mich zuerst davon abhielt war, daß ich davon ausging, daß genau so viel Threads parralel laufen wie es Elemente zu bearbeiten gibt. Dies ist aber nicht der Fall, normalerweise läuft je ein thread pro Kern, dies kann aber auch mit
QThreadPool::globalInstance()->setThreadCount()
auf einen anderen Wert geändert werden.
nach langer Suche und einer parallelen Frage im englischen Forum habe ich von QtConcurent::run auf QtConcurent::map umgestellt, dazu gibt es Beispiele wie man es mit QProgressDialog verknüpft. Was mich zuerst davon abhielt war, daß ich davon ausging, daß genau so viel Threads parralel laufen wie es Elemente zu bearbeiten gibt. Dies ist aber nicht der Fall, normalerweise läuft je ein thread pro Kern, dies kann aber auch mit
QThreadPool::globalInstance()->setThreadCount()
auf einen anderen Wert geändert werden.