Qt QML窗口调整大小/移动闪烁

Qt QML窗口调整大小/移动闪烁,qt,qml,qt5,qt-quick,qtquickcontrols,Qt,Qml,Qt5,Qt Quick,Qtquickcontrols,我现在正在开发一个简单的QML应用程序,我注意到,与qtwidts窗口相比,调整和移动QML窗口会产生难看的闪烁 因此,我创建了两个测试应用程序来显示差异: QWidgets: QML: 正如您所看到的,QML版本的应用程序闪烁得非常难看,而qtwidts一个是干净的。现在,当您的UI变得越来越复杂时,这会变得非常糟糕 你知道这件事吗?这是虫子吗?是否有解决此问题的方法?您可以尝试以下方法: int main(int argc, char* argv[]) { QCoreApplicatio

我现在正在开发一个简单的
QML
应用程序,我注意到,与
qtwidts
窗口相比,调整和移动
QML
窗口会产生难看的闪烁

因此,我创建了两个测试应用程序来显示差异:

QWidgets:

QML:

正如您所看到的,
QML
版本的应用程序闪烁得非常难看,而
qtwidts
一个是干净的。现在,当您的UI变得越来越复杂时,这会变得非常糟糕

你知道这件事吗?这是虫子吗?是否有解决此问题的方法?

您可以尝试以下方法:

int main(int argc, char* argv[]) {
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
or
QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
第一个选项使用OpenGl2DirecX角度库(如Google Chrome)

第二种是通过软件进行OpenGL仿真。。。对于小程序来说,它工作得非常好,并且与Windows XP等旧操作系统100%兼容

注意:您可以尝试使用Qt5.7和新的Qtquick.Controls 2.0…性能更好。。。

在我的例子中,我通过添加下一个标志解决了这个问题:

QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);

但这会增加其他渲染问题。或者不是。

QML应用程序的大小调整问题在于用过时的几何图形更新窗口。解决方案是同步更新和调整大小

由于更新计时器可能会突然更新到渲染场景图,这可能会随时更新窗口,因此会导致使用过时的几何体绘制内容。

应使用基本同步或扩展同步来同步调整大小和窗口更新。 目前在Qt中使用并实现了基本同步,但仍然需要将窗口更新(来自计时器)与Windows管理器中的调整大小事件同步

但是,与往常一样,存在一系列问题:

当窗口的大小调整过快时,就会发现问题。 由于同步事件(来自WM)应一致发送,因此上一次之后的下一次:


  • 在golang therecipe/qt中,请帮助我:

    func main() {
        var format = gui.NewQSurfaceFormat()
        format.SetVersion(4, 5)
        format.SetProfile(gui.QSurfaceFormat__CoreProfile)
        format.SetRenderableType(gui.QSurfaceFormat__OpenGL)
        format.SetSwapInterval(0)
        format.SetDefaultFormat(format)
        os.Setenv("QT_SCALE_FACTOR", "1")
        ap := widgets.NewQApplication(len(os.Args), os.Args)
        ap.SetApplicationName("APP 1.1")
    
    系统:Linux debian 10 gpu:Radeon 570


    但是动画速度更快,因为不是所有的帧都被渲染

    您使用哪种显卡?@Milovidov我使用的是集成在英特尔核心i5-3360M中的集成英特尔高清图形4000。英特尔在OpenGL实现方面存在问题。尝试在没有OpenGL的情况下获取或编译qt。在本例中,Qt Quick将绘制为本机小部件,例如Qt小部件解决方案。此外,您可以尝试更新图形驱动程序。我希望我有您的问题。应用程序的用户多久调整一次窗口大小?在我的Windows 7 PC上试用Qt 5.6.2和Intel Graphics 4000。使用Qt::AA_,Opengles的性能会更好!非常感谢。