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

时间:2019-07-19 13:30:21

标签: c++ qt qt5 qsplashscreen

所以我有以下代码:

data = data.frame(col1 = c(rep('first value', 5)), col2 = c(rep('second value', 5)))
> data
         col1         col2
1 first value second value
2 first value second value
3 first value second value
4 first value second value
5 first value second value
> data = data %>% dplyr::select(col1)
Error in select_impl(.data, vars) : 
  SET_VECTOR_ELT() can only be applied to a 'list', not a 'symbol'

这可以很好地运行,并且启动画面完全按照我想要的方式显示,但是它在任务栏中没有显示图标,因此可以单击另一个窗口,再也看不到启动栏(它隐藏在其他窗口的后面)。

我已经尝试使用窗口标志QString splashImageFilePath = ":/images/Splashscreens/startup.png"; QSplashScreen * splash = new QSplashScreen(); splash->setPixmap(QPixmap(splashImageFilePath)); splash->show(); splash->raise(); ,但如果使用此标志,任务栏中仍然没有图标,现在它始终位于所有其他窗口的顶部(我不想要)。

到目前为止,我已经浏览了几个窗口标记,并在Google上展示了很长时间,我试图展示它。

另外,我知道我可以给构造函数一个父窗口,但是这段代码在Qt::WindowStaysOnTopHint内部,因此我没有办法给它一个父窗口(带有空构造函数的QWidget也没有不起作用)。

  

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

提前谢谢!

1 个答案:

答案 0 :(得分:1)

有点晚了,但是我遇到了同样的问题,并直接使用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();