Seite 1 von 1

Geschwindigkeit QLabel setText()

Verfasst: 16. April 2008 10:28
von iphenion
Hallo,
ich habe hier ein eklatantes Performance Problem beim setzen
der Text Eigenschaft eines QLabel.
Als Beispiel mal dieser Code:

Code: Alles auswählen

void Mainwin::on_test2Action_triggered() {
	qDebug ("test2Action triggered");
	sdiftime_usec();
	for (int t=0; t<1000;t++) {
		QString str;
		str = "Test:";
		str += QString::number(t);
		labelDumpfile->setText(str);
		QCoreApplication::processEvents();
	}
	unsigned long long er = sdiftime_usec();
	modul_textEdit->append(QString("Zeit:%1ms").arg(er/1000));
	qDebug ("Zeit:%llums",er/1000);
}
Die Ausführungszeit hierfür ist auf einem IntelCore2 Quad
über 8 Sekunden! Also ca. 8 ms pro Durchlauf.
QT Version ist 4.3.1.
Woran liegt es, dass das so grottenlangsam ist?
Das Label liegt in einem Gridlayout in einem QFrame, der wiederum in einem Tab Widget liegt.
Wenn ich das Label auf die "erste Ebene" bringe, komme ich immerhin auf eine Zeit von 1ms pro Durchlauf.

Hat jemand eine Erklärung dafür bzw. einen Tipp, wie ich das
beschleunigen könnte?

Gruß, Peter

Verfasst: 16. April 2008 10:31
von Christian81
Dieser Testcase ist irgendwie... sinnlos :)

Bei jedem neuen Setzen muss auch das Layout usw. neu berechnet werden. Das dauert schon ein wenig. Und wie lange er in QCoreApplication::processEvents() rumhängt um irgendwelche Events abzuarbeiten sieht man auch nicht.

Verfasst: 16. April 2008 10:42
von iphenion
Hallo,
sensationell, wie schnell diese Antwort kam.

Das der Aufruf von processEvents hier sinnlos ist, ist schon klar.
Ich möchte halt (zu Testzwecken) erreichen, das das Layout
explizit berechnet und der Text ausgegeben wird.

In meiner Anwendung erfolgt die Ausgabe Timer gesteuert.(ca. 10 mal pro Sekunde)
Leider wird durch die Ausgabe die Mainloop so lange unterbrochen, das die restliche Bedienung leidet.
Das kann ja wohl nicht sein. So krass habe ich das noch nie gesehen. Bei GTK funktioniert das z.B. schneller und auch
mit der Beta von QT 4.4 ist der Effekt nicht ganz so drastisch (ca. 3ms im Gegensatz zu 8ms mit QT 4.3)

Verfasst: 16. April 2008 10:55
von Christian81
Also 10 mal pro Sekunde irgend eine Änderung ist zwar für das menschliche Auge ggf. zu viel aber für Qt sollte das ok sein. Ein realistischeres Testcase könnte ggf. mehr Aufklärung bringen.