【问题标题】:Qml flicker on animation in frameless QQuickView (QtQuick2)无框QQuickView(QtQuick2)中的Qml动画闪烁
【发布时间】:2016-04-18 23:45:55
【问题描述】:

main.cpp

#include <QGuiApplication>
#include <QQuickView>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQuickView *view= new QQuickView;
    view->setFlags(Qt::Tool|Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);
    view->setColor(Qt::transparent);
    view->show();
    view->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}

qml 文件:

import QtQuick 2.0

Rectangle {
    width: 100
    height: 100
    color: "#80808080"

    Rectangle {
        width: 10
        height: 10
        anchors.centerIn: parent
        RotationAnimation on rotation {
            duration : 15000
            easing.type: Easing.Linear
            loops: Animation.Infinite
            from: 0
            to: 360
        }
    }
}

透明背景flickers,但只有动画。这个例子很基础,那有什么问题呢?

【问题讨论】:

  • 嗯,这不是 QML 代码,可能是平台支持的问题?如果您不设置这些额外的视图标志,它会闪烁吗?
  • 不。没有 FramelessWindowHint 一切都很好。
  • 嗯,它看起来像一个错误,你应该发布一个错误报告。只是不要为了快速解决而屏住呼吸:)

标签: c++ qml flicker qquickview


【解决方案1】:

简短回答: 设置环境变量为 QSG_RENDER_LOOP=basic

长答案: 我不知道确切的内部结构。当设置了 QSG_RENDER_LOOP=threaded 时,Qmlscene 由多个线程渲染。但有些驱动程序无法渲染流畅的动画。因此,对于未经测试的系统 (x11,mesa),最初将 QSG_RENDER_LOOP 设置为基本。由于 5.5 线程是默认的。

【讨论】:

    【解决方案2】:

    试试“view->setFlags(Qt::SplashScreen)” 也许可以解决这个问题,但是窗口不能调整大小和移动。这没有意义,但确实如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2019-03-05
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      相关资源
      最近更新 更多