Qt中访问提升类中资源(ui控件)的方法

文章介绍了在Qt中,将QWidget提升到Mainwindow后无法访问的问题,提供了两种解决方案:1.将提升的类转换为单例;2.直接操作UI头文件中的publiccentralWidget。通过修改类属性和包含头文件解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在使用qt的时候,将一个QWidget类提升到Mainwindows上后,好像就在Mainwindow里面访问不到这个已提升的类或者对象了。这个时候如果你使用如下方法:

Mywidget * m = new Mywidget(this); 

使用这个new出来的对象来访问的话,大概率会发现,界面上多出了一个新的界面类对象,这就很苦恼了,这样的话会导致在之后的使用中造成很多麻烦。下面介绍两种方法,可以直接操作提升1到Mainwindow上的类对象。

一,将提升的类变成为一个单例,使用唯一对象访问

1,将要提升的类转化为一个单例

form.h

!!!这里一定要将 UI::Form *ui 设置为public,不然之后访问不了!!!

form.cpp

2,在mainwindow中包含该对象和该对象的ui头文件

mainwindow.h

mainwindow.cpp

这样改好后,直接运行显示在 ui_mainwindow.h 头文件中报了一个错,错误原因是单例不可以直接new 出来,将 

centralWidget = new Form(MainWindow);

改为:

centralWidget = Form::getInstance();

再运行,不会报错,就会发现在mainwindow里面设置的label文字正常出现在了mainwindow里面

二,直接访问ui头文件中的成员对象

在实验第一种方法的时候,发现在ui_mainwindow.h头文件中,在ui设计师界面中有一个public centralWidget 对象,就想着如果Qt原来如果是直接提升的类new给这个对象,那我如果能直接操作这个centralWidget ,是不是就可以调用提升对象类中的资源了,试了一下,结果发现还真的可以,第二种方法比第一种方法简单,也更容易理解(还是要看一下源代码,之前百度了好多都没找到自己想要的答案)。

1,将提升的类的成员对象 ui 改为 public

2,在mainwindow.cpp中包含该对象的ui头文件

包含了直接引用就行了

加油加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值