Qt里怎么恢复一个被最小化的窗口

发布时间 2023-06-05 12:06:17作者: 桑底坡

这个需求出现在窗口最小化之后又被再次运行的时候。很多用户往往不去注意窗口是否已经存在,而是经常直接再次执行打开窗口操作。为了拦截这种情况,通常我们会去检测到窗口是否已经存在,如果存在则把它恢复正常,而不是再新创建一个。

这个操作是通过 ShowNormal() 实现的,但这个函数在windows和Linux下表现不大一样。

举例说明。比如 f 是指向窗口的指针。

if(f == NULL)
{
f = new Form();
}

f->showNormal();

在windows里,这样就可以了。但在Linux里,除了上面代码,还需要增加一句:

f->activateWindow();

只有这样窗口才会恢复出来。而且在Linux里,showNormal 和 show 表现一样,都可以通过这个方法把窗口恢复出来,但windows里则不行,必须用 showNormal。

在一本比较权威的书里看到show(),raise(),activateWindow()这三个函数连用的写法。但测试没发现raise()有什么不可或缺的作用,有它没它结果都一样。

我的测试环境,win10,ubuntu 22,qt 5.12.9。