如何在使用QSplashScreen时显示任务栏图标

问题描述 投票:0回答:2

所以我有以下代码:

QString splashImageFilePath = ":/images/Splashscreens/startup.png";

QSplashScreen * splash = new QSplashScreen();
splash->setPixmap(QPixmap(splashImageFilePath));

splash->show();
splash->raise();

这运行良好,启动屏幕的显示与我想要的完全一样,但它没有在任务栏中显示图标,因此可以单击另一个窗口,并且永远无法再次看到启动栏(它隐藏在其他窗户后面)。

我已经尝试过使用窗口标志

Qt::WindowStaysOnTopHint
,但如果我使用它,任务栏中仍然没有图标,而且现在它始终位于所有其他窗口的顶部(我不想要)。

到目前为止,我已经浏览了一些窗口标志,并在谷歌上搜索了很长一段时间,我试图展示它。

另外,我知道我可以给构造函数一个父窗口,但是这段代码位于

main.cpp
内部,所以我没有办法给它一个父窗口(带有空构造函数的 QWidget 也不起作用) .

TLDR:我希望我的 QSplashScreen 在任务栏中有一个图标。

提前谢谢您!

c++ qt qt5 qsplashscreen
2个回答
3
投票

有点晚了,但我遇到了同样的问题并直接使用 WinAPI 修复了它:

QSplashScreen splash;
splash.setPixmap(QPixmap(splashImageFilePath));

// ensure that taskbar icon is shown while the splash screen is active
int exstyle = GetWindowLong(reinterpret_cast<HWND>(splash.winId()), GWL_EXSTYLE);
SetWindowLong(reinterpret_cast<HWND>(splash.winId()), GWL_EXSTYLE, exstyle & ~WS_EX_TOOLWINDOW);

splash.show();

0
投票
splash->setWindowFlag(Qt::Tool, false);
splash->show();
© www.soinside.com 2019 - 2024. All rights reserved.