QT ui 带来麻烦
admin
2023-08-03 21:48:24
0

setupUi()引起的麻烦

 

由.ui文件生成的类的构造函数里都有一个setupUi(this)。这个函数的作用是对界面进行初始化,它按照我们在Qt设计器里设计的样子把窗体画出来,把我们在Qt设计器里面定义的信号和槽建立起来。也可以说,setupUi 是我们画界面和写程序之间的桥梁。
但有一点需要注意的是,setupUi在执行的时候会触发界面上的事件。如果忽视了这点,那可能就会遇到一些莫明其妙的麻烦。
我曾在一个类的构造函数里这样写:

    setupUi(this);    //系统自动生成的
    bool flag=false;    //对我自己定义的变量初始化
    ...

界面上有一个tabWidget,我定义了一个槽来接收tabWidget的tabClicked()信号,在该槽里用到flag变量。
调试程序中发现此类不稳定,经常会在类生成时突然跳出,什么提示也没有。
起初我以为类的构造函数应该是最先执行的,构造完成之后这个类才开始正式运转,发生各种信号和槽的关系。这么考虑起来,这个类没有任何理由不稳定。可是从现象上看,一定是有某个地方有内存操作的异常,这个异常引起了程序的不可靠。
问题出面哪里?
我怀疑过开发环境,于是从QDevelop环境迁移到了QCreator,不管用。怀疑过操作平台,换了几个Linux的发行版,也不好使。
后来在QCreator的调试模式下运行,在系统崩溃后查看调用栈时发现,类生成的过程里,居然触发了好多窗体上的事件!
这一定是setupUi运行时发生的事。
因为在类的构造函数里我把自己定义的变量初始化都放到了setupUi之后,这样,在窗体事件时用到了一些未初始化的变量,从而引起系统不可靠。
后来修改了类的构造函数,把setupUi移到变量初始化的后面,于是问题全部解决


相关内容

热门资讯

德国miji电饭煲触摸开关没反... 由于两种原因造成,第一是这种电饭锅都为微电脑电饭锅,如果在启动过程之中出现错误,有可能导致接触开关没...
华帝热水器触摸屏失灵修复小技巧 需要更换控制面板。找到一样的配件,拆下四周的固定螺丝然后打开前面板,拆下控制面板模块,把新的插上去,...
第七期苏州大讲堂举行 7月11日,第七期苏州大讲堂举行。英国皇家工程院院士、香港理工大学讲席教授林建国,围绕“前沿新材料赋...
谁知道红日燃气灶好不好 最佳回答 你好,很高兴为您解答!我可以很明确的告诉您红日燃气灶的质量非常好,只要你买到的是正宗的红日...
红日燃气灶怎么样大佬告诉一下 最佳回答 你好,这位网友,红日燃气灶不是一线大品牌哦,但是它的价格还是蛮便宜的,性价比也是比较高的,...
红日红外线燃气灶好不好 最佳回答 你好,很高兴为您解答!就我个人觉得,中式厨具不适宜用红外线灶具,红外线灶具的核心是红外线炉...
美军第四轮空袭打击范围发生变化... 美军一周内密集发动四轮打击,多轮打击的范围及目标区域有何异同之处?美方接下来可能还会有哪些进一步的军...
原创 彻... #小米回应网传澎程价格 #,近期全网刷屏的小米澎程 N90 低价预言彻底翻车,无数米粉期待的 20 ...
每经热评丨当“韦神”不再靠馒头... 每经评论员 付克友 7月8日,2025年度国家科学技术奖揭晓。北京大学数学科学学院教授章志飞与长聘副...
中国电信试验AI传输卫星视频新... IT之家 7 月 13 日消息,中国电信研究院今日宣布,中国电信(研究院、上海公司和中电信应急公司)...