2015-06-13 20 views
9

Ich entwickle eine einfache QML Anwendung jetzt und ich bemerkte, dass die Größenänderung und Verschieben eines QML Fensters erzeugt ein hässliches Flimmern im Vergleich zu einem QtWidgets Fenster, zum Beispiel. SoQML Fenster Größe ändern/Move Flicker

Ich habe 2 Prüfanwendungen den Unterschied zeigen:

QWidgets:

enter image description here

QML:

enter image description here

Wie Sie t sehen er QML Version der Anwendung flackert ziemlich hässlich, während die QtWidgets man ist sauber. Jetzt wird das ziemlich hässlich, wenn Ihre Benutzeroberfläche komplexer wird.

Haben Sie etwas darüber wissen? Ist das ein Fehler? Gibt es eine Lösung für dieses Problem?

+0

Welche Videokarte verwenden Sie? – Milovidov

+0

@Milovidov Ich benutze die integrierte Intel HD Graphics 4000, die in einem Intel Core i5-3360M integriert ist. –

+3

Intel hat ein Problem mit der OpenGL-Implementierung. Versuchen Sie qt ohne OpenGL zu kompilieren. In diesem Fall wird Qt Quick als native Widgets, z. B. als qt Widgets-Lösung, dargestellt. – Milovidov

Antwort

3

Sie können dies versuchen:

int main(int argc, char* argv[]) { 
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES); 
or 
QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL); 

Die erste Option verwendet OpenGl2DirecX Winkel-Bibliothek (wie Google Chrome)

Die zweite verwendet OpenGL-Emulation von Software ... für kleine Programme sehr gut arbeiten und ist zu 100% kompatibel mit alten Betriebssystemen wie Windows XP.

Hinweis: Sie können mit Qt versuchen 5.7 und neuen Qtquick.Controls 2.0 ... führt viel besser ... https://blog.qt.io/blog/2016/06/10/qt-quick-controls-2-0-a-new-beginning/

+0

Ich habe es auf meinem Windows 7 PC mit Qt 5.6.2 und Intel Graphics 4000 versucht. Mit Qt :: AA_UseOpenGLES geht es viel besser! Vielen Dank! – mrAlmond

1

In meinem Fall, ich dies die nächste Flagge durch Zugabe gelöst:

QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software); 

Aber das wird andere Rendering-Probleme hinzufügen. Oder nicht.