Ich habe festgestellt, dass QPainter :: drawText unter Linux schrecklich langsam ist, wenn es mit einer skalierten Fensterzuordnung verwendet wird. Kann ich irgendetwas dagegen tun? Ich habe bereits überprüft, ob die Deaktivierung von Anti-Aliasing oder die Aktivierung des Raster-Renderers einen Unterschied macht, tut dies aber nicht.Schlechte Performance von QPainter :: drawText unter Linux
Beispiel: Wenn Sie eine Darstellungsfeldgröße von (450px, 200px) verwenden, wird eine Fenstergröße von Faktor 100 (45000, 20000) und damit auch um den Faktor 100 skaliert (1400pt) und das 30-fache wiedergegeben hallo "dauert unter Linux etwa 4 (!) Sekunden - sowohl auf OpenSuse als auch auf Ubuntu.
Das gleiche Beispiel wird im Handumdrehen auf Windows und Mac gerendert.
Nur zur Klarstellung: Obwohl die Schriftgröße hochskaliert wird, erscheint der Text aufgrund des beschriebenen Fensters < -> Ansichtsfensterzuordnung in "normaler" Größe auf dem Bildschirm.
Hier ist die einfache Beispielcode ich verwende:
void Widget::paintEvent(QPaintEvent *event)
{
const int scaleFactor = 100;
QPainter painter(this);
// Setup font
QFont font;
font.setPointSize(14*scaleFactor);
painter.setFont(font);
// Setup mapping
painter.setWindow(0, 0, width() * scaleFactor, height() * scaleFactor);
// Render the text
for (int i = 0; i < 30; i++)
painter.drawText(qrand() % (width() * scaleFactor), qrand() % (height() * scaleFactor), "Hello");
}
Jede Hilfe wäre genial.
Hinweis: Ich bin mit Qt 4.8.5
Haben Sie versucht, den Maler mit 'painter.scale (scaleFactor, scaleFactor) 'zu skalieren, anstatt das Fensterrechteck zu setzen? Macht es einen Unterschied? – vahancho
Ich habe gerade einen Schnelltest gemacht. Es macht keinen Unterschied. – Fabian
Ok. Dann könntest du dir eine Grenze für den Zeichnungsbereich vorstellen, die deutlich kleiner als 45000x20000px ist. – vahancho