qt中UI的控件的使用问题

tr3301103 2013-08-12 04:20:58
我在MainWindow类中已经做好主窗口的控件布局等等,现在重新定义了一个新的类,想在新的类中使用窗口中的控件,请问要怎么弄?我在新的类中用Ui::MainWindow定义一个变量,初始化后再"ui->"方式使用控件,可是编译不通过,求指教!!
...全文
4096 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼主,怎么解决的啊
  • 打赏
  • 举报
回复
引用 7 楼 bluebai123 的回复:
[quote=引用 6 楼 foxyz 的回复:] 你的想法其实感觉上可以,但是其实你会发现这么用很僵化!。 我也曾经碰到过这种情况,尽量还是MVC来的更低耦合些。首先,你要用到第一个UI的设计类 Ui::MainWindow, 那么你就得包含相关的自动生成的头文件ui_xxx.h,这个文件万一改个名字你就得 重新编译。其次,你的其他UI还得保证不会重名,也就是你不能在namespace Ui里再增加一个class MainWindow 也不能再有一个Ui_MainWindow. 如果你必须用,比较简单的办法是,在第一个UI类中增加一个public函数 Ui::MainWindow *getUi() { return ui; }
楼上很给力,我补充一下 A类定义了一个B类对象,A类访问B类的UI这样做: 1、在B类中定义UI::B *getui(){return ui;} 2、在A类的的cpp中假如B类的ui头文件 3、在A类的头文件中声明B类UI的对象bui 4、在A类cpp文件中:bui = B.getui(); 基本上以上4部就能完全实现A类访问B类的UI控件[/quote] 能不能给各简单的例子啊。。代码什么的都好。。。谢谢
bluebai1231 2013-12-19
  • 打赏
  • 举报
回复
引用 6 楼 foxyz 的回复:
你的想法其实感觉上可以,但是其实你会发现这么用很僵化!。 我也曾经碰到过这种情况,尽量还是MVC来的更低耦合些。首先,你要用到第一个UI的设计类 Ui::MainWindow, 那么你就得包含相关的自动生成的头文件ui_xxx.h,这个文件万一改个名字你就得 重新编译。其次,你的其他UI还得保证不会重名,也就是你不能在namespace Ui里再增加一个class MainWindow 也不能再有一个Ui_MainWindow. 如果你必须用,比较简单的办法是,在第一个UI类中增加一个public函数 Ui::MainWindow *getUi() { return ui; }
楼上很给力,我补充一下 A类定义了一个B类对象,A类访问B类的UI这样做: 1、在B类中定义UI::B *getui(){return ui;} 2、在A类的的cpp中假如B类的ui头文件 3、在A类的头文件中声明B类UI的对象bui 4、在A类cpp文件中:bui = B.getui(); 基本上以上4部就能完全实现A类访问B类的UI控件
donwmufromdying 2013-08-13
  • 打赏
  • 举报
回复
你的想法其实感觉上可以,但是其实你会发现这么用很僵化!。 我也曾经碰到过这种情况,尽量还是MVC来的更低耦合些。首先,你要用到第一个UI的设计类 Ui::MainWindow, 那么你就得包含相关的自动生成的头文件ui_xxx.h,这个文件万一改个名字你就得 重新编译。其次,你的其他UI还得保证不会重名,也就是你不能在namespace Ui里再增加一个class MainWindow 也不能再有一个Ui_MainWindow. 如果你必须用,比较简单的办法是,在第一个UI类中增加一个public函数 Ui::MainWindow *getUi() { return ui; }
jdwx 2013-08-12
  • 打赏
  • 举报
回复
一个类直接操作另一个类里UI上的控件不是一个好办法。 应该按照功能给每个类封装,提供出给外部使用的接口(函数、信号、槽)。
tr3301103 2013-08-12
  • 打赏
  • 举报
回复
我的界面设计都是在ui_xxx.h中的,为什么也不行,ui_xxx.h文件中不也是个类吗为什么不能以像其他类一样的方式调用?
_Gx 2013-08-12
  • 打赏
  • 举报
回复
引用 2 楼 tr3301103 的回复:
不好意思,没说清楚,我的意思是在新的类中用Ui::MainWindow定义一个变量(Mainui),初始化后再"Mainui->"方式使用控件时不行。不是直接用MainWindow里定义的ui。
这样当然不行,你的所有空间都是在ui里面定义的,你只有通过ui来指定。 如果你想通过一个类实例来指定,那么这个控件必须定义在你的类里面。 比如,在你的类定义一个变量

QLabel *label;
构造函数去new

label = new QLabel(this);
不过这个变量必须是public的,这样在外部才能访问到。
tr3301103 2013-08-12
  • 打赏
  • 举报
回复
不好意思,没说清楚,我的意思是在新的类中用Ui::MainWindow定义一个变量(Mainui),初始化后再"Mainui->"方式使用控件时不行。不是直接用MainWindow里定义的ui。
probxl 2013-08-12
  • 打赏
  • 举报
回复
因为ui是MainWindow私有成员变量,不能直接这样用,ui要在MainWindow的类里面使用

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧