[英]QT - SplashScreen implementation
我有一个用于 Linux 的嵌入式 Qt 应用程序,它具有以下启动代码:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// Startup actions neeeded to display AppView correctly
// Black screen is shown for several seconds
// ...
QQuickView AppView;
AppView.setSource(QUrl(QStringLiteral("main.qml")));
AppView.resize(480, 800);
AppView.show();
return app.exec();
}
我想删除 AppView 之前显示的黑屏并显示 QML 动画而不是它。
我在这里看到两个可能的选项,但没有一个是明确的。 您能否建议其中哪一个更正确,并评论/回答每个问题。
选项 1:在 main() 的开头显示 QSplashScreen。
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSplashScreen *splash = new QSplashScreen();
splash->show();
// Startup actions neeeded to display AppView correctly
// Black screen is shown for several seconds
// ...
}
这里的问题是使用什么 API 将 QML 动画附加到 QSplashScreen? QSplashScreen 继承自 QWidget,据我所知,没有像 QQuickWidget::setSource() 这样的 API 可以使用。
选项 2:在 main() 的开始处显示另一个 QQuickView 并附加 QML 动画。
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQuickView SplashView;
SplashView.setSource(QUrl(QStringLiteral("SplashScreen.qml")));
SplashView.resize(480, 800);
SplashView.show();
app.exec();
// Startup actions neeeded to display AppView correctly
// Black screen is shown for several seconds
// ...
QQuickView AppView;
AppView.setSource(QUrl(QStringLiteral("main.qml")));
AppView.resize(480, 800);
AppView.show();
}
这里的问题是如何关闭 SplashView 并在其上显示 AppView?
谢谢
选项 1 不是一个好主意。 您不应混合使用 Qt Quick 和 Qt Widgets 应用程序。
QApplication::exec()启动主 gui 线程的事件循环,直到应用程序退出才返回。 虽然我不喜欢你处理闪屏的方式,但在这种情况下,你可以使用这样的方法。
QGuiApplication app(argc, argv);
QQuickView view;
view.setSource(QUrl("SplashScreen.qml"));
view.resize(640, 480);
view.show();
QTimer::singleShot(2000,&view,[&view](){
view.close();
view.setSource(QUrl("main.qml"));
view.show();
});
return app.exec();
我使用计时器来模拟“正确显示应用程序的操作”。 您应该用您的类替换该部分,该类执行操作。 操作完成后,该类可以在接收槽中发出信号,您可以关闭显示闪屏和主应用程序的当前视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.