2015-06-13 31 views
9

Opracowuję teraz prostą aplikację QML i zauważyłem, że zmiana rozmiaru i przeniesienie okna QML generuje brzydkie migotanie w porównaniu do okna QtWidgets, na przykład.Zmiana rozmiaru/migotania okna QML

Więc stworzyłem 2 aplikacje testowe, aby pokazać różnicę:

QWidgets:

enter image description here

QML:

enter image description here

Jak widać t on QML wersja aplikacji migocze dość brzydko podczas gdy QtWidgets jest czysta. Teraz staje się to dość brzydkie, gdy twój interfejs rośnie w złożoności.

Czy masz jakąś wiedzę na ten temat? Czy to błąd? Czy istnieje jakaś poprawka/obejście tego problemu?

+0

Z której karty wideo korzystasz? – Milovidov

+0

@Milovidov Używam zintegrowanej Intel HD Graphics 4000, która jest zintegrowana z Core i5-3360M Intela. –

+3

Intel ma problem z implementacją OpenGL. Spróbuj pobrać lub skompilować qt bez OpenGL. W takim przypadku Qt Quick będzie malować jako rodzime widżety, takie jak rozwiązanie widgetów qt. – Milovidov

Odpowiedz

3

Można spróbować to:

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

Pierwsza opcja wykorzystuje bibliotekę kąt OpenGl2DirecX (jak Google Chrome)

Drugi stosuje emulację OpenGL przez oprogramowanie ... za małe programy działają bardzo dobrze i jest w 100% zgodny ze starym systemem operacyjnym, takim jak Windows XP.

Uwaga: Można spróbować z Qt 5.7 i nowe Qtquick.Controls 2,0 ... sprawuje się dużo lepiej ... https://blog.qt.io/blog/2016/06/10/qt-quick-controls-2-0-a-new-beginning/

+0

Próbowałem na moim komputerze z Windows 7 z Qt 5.6.2 i Intelem Graphics 4000. Z Qt :: AA_UseOpenGLES działa znacznie lepiej! Dziękuję Ci! – mrAlmond

1

W moim przypadku to rozwiązać dodając kolejną flagę:

QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software); 

Ale to spowoduje dodanie innych problemów z renderowaniem. Albo nie.