setupUi()引起的麻烦

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

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

界面上有一个tabWidget,我定义了一个槽来接收tabWidget的tabClicked()信号,在该槽里用到flag变量。
调试程序中发现此类不稳定,经常会在类生成时突然跳出,什么提示也没有。
起初我以为类的构造函数应该是最先执行的,构造完成之后这个类才开始正式运转,发生各种信号和槽的关系。这么考虑起来,这个类没有任何理由不稳定。可是从现象上看,一定是有某个地方有内存操作的异常,这个异常引起了程序的不可靠。
问题出面哪里?
我怀疑过开发环境,于是从QDevelop环境迁移到了QCreator,不管用。怀疑过操作平台,换了几个Linux的发行版,也不好使。
后来在QCreator的调试模式下运行,在系统崩溃后查看调用栈时发现,类生成的过程里,居然触发了好多窗体上的事件!
这一定是setupUi运行时发生的事。
因为在类的构造函数里我把自己定义的变量初始化都放到了setupUi之后,这样,在窗体事件时用到了一些未初始化的变量,从而引起系统不可靠。
后来修改了类的构造函数,把setupUi移到变量初始化的后面,于是问题全部解决。
PyQt5是一个Python GUI编程框架,它可以用于创建多种不同类型的应用程序,包括桌面应用程序、Web应用程序和移动应用程序等。在PyQt5中,使用Qt Designer可以轻松地创建GUI界面,但是,在使用这个工具时,我们需要将生成的.ui文件转化为Python代码以便在代码中使用。这时就需要使用PyQt5中的setupui模块了。 setupui模块是将Qt Designer生成的.ui文件转换为使用PyQt5编写的Python代码的工具,它可以将.ui文件中的控件和信号与槽自动转换为Python代码,从而在Python代码中可以轻松地使用这些控件并响应它们发送的信号。 在使用setupui模块之前,我们需要安装PyQt5和Qt Designer,这两个工具都可以从官方网站或终端中下载和安装。安装完成后,打开Qt Designer,创建并编辑一个GUI界面,然后将该界面保存为.ui文件。 接下来,我们可以使用PyQt5中的uic模块来将.ui文件转换为Python代码。具体来说,我们可以使用以下代码来完成这个过程: ``` from PyQt5 import uic uic.loadUi("ui_file.ui", self) ``` 其中,“ui_file.ui”是我们要转换的.ui文件的文件名,而“self”则是我们当前使用的QWidget对象。使用这段代码,我们就可以将.ui文件转换为Python代码,并使用转换后的Python代码在我们的应用程序中使用Qt Designer所创建的GUI界面。 总之,PyQt5中的setupui模块使得开发者可以更加方便地将Qt Designer生成的GUI界面转化为Python代码,并且能够从中获得更好的代码模块化和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值