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

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

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

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

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

f->showNormal();

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

f->activateWindow();

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

还有一个问题,上述写法是针对窗口被最小化,有时窗口没最小化,只是被别的窗口遮挡,这种情况windows也需要加:

f->activateWindow();

在一本比较权威的书里看到show(),raise(),activateWindow()这三个函数连用的写法。估计是一个组合拳的写法,有栆没栆打三杆子,执行起来也不费时间,还能覆盖所有可能出现的情况。

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

posted @ 2023-06-05 11:57  桑底坡  阅读(1003)  评论(0编辑  收藏  举报