之前在使用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头文件
包含了直接引用就行了
加油加油!