问题
有时界面出现弹窗时,需要在当前弹窗操作结束后,才能进行其他操作。这种情况一般将弹窗设置模态的就可以了,函数 setModal(true)
非模态窗口处理
还有一种情况是非模态下的弹窗,当前弹窗出现时,弹窗之外的部分控件不能操作。这时需要对界面之前固定的控件做限制。网上有的说用isActiveWindow 判断当前弹窗状态,该函数智能判断当前窗口是否处于活动中。无法判断当前窗口是否在最前面。尤其是在有多个非模态弹窗的情况下。这种时候就需要找出对应的所有弹窗进行判断,去除需要判断的。
示例代码
void isTopShow()
{
bool bTop = true;
auto dialogList = findChildren<QDialog*>();
for (auto& item : dialogList)
{
if (item->isVisible())
{
bTop = false;
break;
}
}
return bTop;
}
这种可判断 QMainWindow 是否显示在最前面。如果需要判断固定窗口,判断时排除改窗口即可