setupUi()引起的麻烦
由.ui文件生成的类的构造函数里都有一个setupUi(this)。这个函数的作用是对界面进行初始化,它按照我们在Qt设计器里设计的样子把窗体画出来,把我们在Qt设计器里面定义的信号和槽建立起来。也可以说,setupUi 是我们画界面和写程序之间的桥梁。
但有一点需要注意的是,setupUi在执行的时候会触发界面上的事件。如果忽视了这点,那可能就会遇到一些莫明其妙的麻烦。
我曾在一个类的构造函数里这样写:
{
setupUi(this); //系统自动生成的
bool flag=false; //对我自己定义的变量初始化
...
}
界面上有一个tabWidget,我定义了一个槽来接收tabWidget的tabClicked()信号,在该槽里用到flag变量。
调试程序中发现此类不稳定,经常会在类生成时突然跳出,什么提示也没有。
起初我以为类的构造函数应该是最先执行的,构造完成之后这个类才开始正式运转,发生各种信号和槽的关系。这么考虑起来,这个类没有任何理由不稳定。可是从现象上看,一定是有某个地方有内存操作的异常,这个异常引起了程序的不可靠。
问题出面哪里?
我怀疑过开发环境,于是从QDevelop环境迁移到了QCreator,不管用。怀疑过操作平台,换了几个Linux的发行版,也不好使。
后来在QCreator的调试模式下运行,在系统崩溃后查看调用栈时发现,类生成的过程里,居然触发了好多窗体上的事件!
这一定是setupUi运行时发生的事。
因为在类的构造函数里我把自己定义的变量初始化都放到了setupUi之后,这样,在窗体事件时用到了一些未初始化的变量,从而引起系统不可靠。
后来修改了类的构造函数,把setupUi移到变量初始化的后面,于是问题全部解决
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享标题:QTui带来麻烦-创新互联
标题网址:http://lswzjz.com/article/pppds.html