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。