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();
}
qmlfile:
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
}
}
}
Прозрачный фон мерцает, но только с анимацией. Пример довольно простой, так в чем же проблема?
Короткий ответ:
Установите для переменной среды значение QSG_RENDER_LOOP = basic
Длинный ответ:
Я не знаю точных внутренних органов. Qmlscene рендерится несколькими потоками, когда установлен QSG_RENDER_LOOP = threadaded. Но некоторые драйверы не могут отображать плавную анимацию. Следовательно, для непроверенных систем (x11, mesa) изначально QSG_RENDER_LOOP был установлен как базовый. Начиная с 5.5 по умолчанию
Попробуйте «view-> setFlags (Qt :: SplashScreen)» Возможно, решите эту проблему, но размер окна нельзя изменить и переместить. Это не имеет смысла, но это так.