Qt中类之间的值传递

lulu23260 2012-02-13 07:56:26
有两个类,比如A和B,A中有个QComboBox的控件,控件动作改变了一个QString,要把这个变了的值传递到类B中来动态显示,怎么实现呢?
看网上大家分享的方法是新建一个类只放这个可以称为全局变量的东西,我这里最好不要新建类,能有别的可以在类B中直接引用类A中的变量的方法吗?
求助!
...全文
864 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
碎炎 2012-02-17
  • 打赏
  • 举报
回复
用信号槽机制传参
cddark 2012-02-15
  • 打赏
  • 举报
回复
首先你先弄清楚A,B,C的层级关系,照你所说大概可以认为A包含B和C。
C出现的时候,A肯定已经在了。而你在C里面又定义了一个A,显然这个A和你想改变的A不是同一个对象,所以你看不到变动。

这时候你需要把C的值,转给A。(信号槽)
或者构造C的时候把A的指针传进去。不需要在C里再构造A。(方法调用,有点类似回调)
lulu23260 2012-02-15
  • 打赏
  • 举报
回复
谢谢各位的建议,我还是把问题说清楚点。类A,B,C,其中A是主窗口的一部分,B是主窗口键盘控制弹出的一模块,C是B上按钮弹出的一模块。C中QComboBox的控件,控件动作改变了一个QString,要把这个变了的值传递到类A中来动态显示,
我是在C中建一个信号槽,槽中str=comboBox->currentText;
并对A的Qlabel赋值,A->numberLabel->setText(str);(C中声明了类A,A的numberLabel是public)
变异无错,执行可执行文件时,A中numberLabel不能随点击QComboBox而变化,
槽中加入一句 testLabel->setText(str); testLabel是C自身的一个QLabel
执行可执行文件时,testLabel可根据点击QComboBox而变化的,A中numberLabel依然不行—————说明槽没问题,只是不能传到其他类中。

我是一个入门级的,所以在这里也说的挺啰嗦只求各位理解,拜托各位给我点意见,看看究竟是什么问题。
qixing1115 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dext 的回复:]
信号 油槽 就是干这个的。改变的时候发个信号就可以了。B类 定义一个油槽
[/Quote]

++,信号,专业的
cddark 2012-02-15
  • 打赏
  • 举报
回复
只说A和C可能让你混淆了。
建议你熟悉一下C++的面向对象相关。还有看Qt文档 Signals & Slots

以下是信号槽的方式大概实现:
  
class MainWindow {
...
MainWindow(...)
{
A *objA = new A(this);
C *objC = new C(this);
connect(objC, SIGNAL(textChanged(QString)), objA, SLOT(setLabel(QString)));
}
}


C需要发送信号,A需要提供一个槽函数。
lulu23260 2012-02-15
  • 打赏
  • 举报
回复 1
您说C中的A和我想改变的不是一个东西,我觉得是这样的,下面的
[Quote=引用 7 楼 cddark 的回复:]
这时候你需要把C的值,转给A。(信号槽)
或者构造C的时候把A的指针传进去。不需要在C里再构造A。(方法调用,有点类似回调)
[/Quote]
没太明白,呵呵,
我就是在C的槽中把值给了A的公开的QLabel,我说的在C中构造A是指C中include a.h,并在C中声明class A;
否则编译的时候C类也不认识A是什么,numberLabel是什么以及在哪里, 至于指针的做法我更不会了…………



cddark 2012-02-14
  • 打赏
  • 举报
回复
信号槽方式 相比 接口调用 可以降低耦合。
A只管发信号,B爱处理不处理。也许C喜欢来处理。
cnsworder 2012-02-14
  • 打赏
  • 举报
回复
类之间传值不需要信号和槽那样的机制吧,C++中直接函数调用通过参数传递不就可以了
pzhuyy 2012-02-14
  • 打赏
  • 举报
回复
A中一个public方法,然后B通过这个public方法来取得,如果要A通知B的话最好用信号方式
我是学友 2012-02-13
  • 打赏
  • 举报
回复
楼主看看QT的信号和槽机制,这可是用QT必备的!很强大的
dext 2012-02-13
  • 打赏
  • 举报
回复
信号 油槽 就是干这个的。改变的时候发个信号就可以了。B类 定义一个油槽

16,216

社区成员

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

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