gpt4 book ai didi

c++ - Qt 启动画面不显示

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:53 25 4
gpt4 key购买 nike

我有这段代码,我希望它显示启动画面,因为它会更大,已经制作了一种计时器,因此可以看到启动画面的工作。问题是我没有看到启动画面,但是代码会在启动画面没有出现时运行,直接将我发送到主窗口而不显示 splas 屏幕。这是我的代码。

主要.cpp

#include <iostream>

#include <QApplication>
#include <quazip/quazip.h>

#include "splashwindow.h"
#include "mainwindow.h"
#include "database.h"

int main(int argc, char *argv[])
{
/* Define the app */
QApplication app(argc, argv);

/* Define the splash screen */
SplashWindow splashW;
/* Show the splash screen */
splashW.show();

/* Download the database */
/* Define the database */
Downloader db;
/* Donwloading the database */
db.doDownload();

/* Unzip the database */
/* Define the database */
//Unzipper uz;
//uz.Unzip();

for(int i = 0; i < 1000000; i++)
{
cout << i << endl;
}

/* Close the splash screen */
splashW.hide();
splashW.close();

/* Define the main screen */
MainWindow mainW;
/* Show the main window */
mainW.showMaximized();

return app.exec();
}

启动窗口.cpp

#include <iostream>
#include <QStyle>
#include <QDesktopWidget>

#include "splashwindow.h"
#include "ui_splashwindow.h"
#include "database.h"

/* Splash screen constructor */
SplashWindow::SplashWindow (QWidget *parent) :
QMainWindow(parent), ui(new Ui::SplashWindow)
{
ui->setupUi(this);
/* Set window's flags as needed for a splash screen */
this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | Qt::SplashScreen);
}

/* Splash screen destructor */
SplashWindow::~SplashWindow()
{
delete ui;
}

飞溅窗口.h

#ifndef SPLASHWINDOW_H
#define SPLASHWINDOW_H

#include <QMainWindow>

namespace Ui {
class SplashWindow;
}

class SplashWindow : public QMainWindow
{
Q_OBJECT

public:
explicit SplashWindow(QWidget *parent = 0);
~SplashWindow();

private:
Ui::SplashWindow *ui;
};

#endif // SPLASHWINDOW_H

命令以这样的方式运行,启动画面在运行之前不会出现,不显示,我找不到修复的方法。

[编辑] 闭包对应的代码放错了地方,虽然放对了还是不行。

最佳答案

您至少有两个问题正在进行中:

  • 您将主线程发送到阻塞循环中,它无法处理包括窗口显示在内的事件。这需要一些事件处理,因此您需要在 while 循环之前调用以下方法:

void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) [static]

  • 根据 documentation,我建议首先使用 QSplashScreen .请注意示例中处理事件的显式调用。下面的代码对我来说工作正常。

main.cpp

#include <QApplication>
#include <QPixmap>
#include <QMainWindow>
#include <QSplashScreen>

#include <QDebug>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap pixmap("splash.png");
QSplashScreen splash(pixmap);
splash.show();
app.processEvents();
for (int i = 0; i < 500000; ++i)
qDebug() << i;
QMainWindow window;
window.show();
splash.finish(&window);
return app.exec();
}

主程序

TEMPLATE = app
TARGET = main
greaterThan(QT_MAJOR_VERSION, 4):QT += widgets
SOURCES += main.cpp

关于c++ - Qt 启动画面不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20928006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com