繁体   English   中英

QT - 启动画面实现

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM