Qt|页面操作-实时窗口调用问题

135 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

上一篇介绍了介绍了互斥通讯时,通讯该如何处理,以及页面实时调用。

那么,现在有这样一个新问题:当程序中存在QDialog创建的窗口时,突然间被通讯呼出一个页面时,父类该是QDialog?QWidget?

这时候,就需要斟酌考虑了。我们可以考虑这两个问题:

1:使用QDialog窗口作为呼出页面父类,是否可行?

2:使用QWidget窗口作为呼出页面父类,是否可行?

思路1当程序中其他页面都是以QDialog作为父类时,此时呼出页面A的父类是QWidget时,会怎么样?

答案:呼出的A页面会被阻塞。

虽然页面能被显示出来,但是该页面上的控件都是不能点击的,也就是我们说的阻塞。此方法肯定是行不通的。

思路2将呼出页面A的父类也变成QDialog时,可以吗?

答案:页面可以被呼出来,且不存在页面阻塞问题。

这里,需要有一点注意,A页面的呼出与关闭都是由通讯控制的,可以根据通讯消息来控制。(相信这里的控制难不住大家的)

思路3程序中的其他页面父类改成以QWidget时,呼出页面A父类既可以是QWidget,也可以是QDialog。

答案:当其他页面父类是QWidget时,此时,无论呼出页面的父类是QWidget还是QDialog时,都可以进行操作。因为由QWidget作为父类的页面不是一个阻塞页面,无论是创建多少个窗口,处于活动状态的都应该是最新创建的窗口。

注意:

在使用实时调用窗口时,一定要记住,QDialog窗口与QWidget窗口相同父类,交替使用的问题。

最容易让开发人员忽略的,就是程序中错误弹框。

假设在程序运行中出现了一个错误,弹出一个QMessageBox窗口,此时这个窗口也属于阻塞窗口,此时,突然呼出实时页面时,也会将页面卡死。

只要避免这个问题,实时调用窗口就没有什么难点了。

我是中国好公民st,一名C++开发程序猿~