在一个类中使用另外一个类的方法失败,高分求解

yediguhong 2014-01-16 07:47:54
adcp.h:
#include "measureControl.h"
public:
measureControl m;
adcp.cpp:
m.flowRate=list[0].toInt();
m.getData();
measureControl.cpp:
void measureControl::getData(){
sampleID++;
repaint( 0, 0, 1000, 600);
}
问题是这样的,我在一个类中(adcp)通过socket接收到数据,然后就放到另外一个类中(measureControl),以便在measureControl中进行绘图,这样来了数据就给measureControl。但是我发现 m.flowRate值就没变,getData()方法也根本就不执行,里面的sampleID++;repaint( 0, 0, 1000, 600)根本就没效果。我估计问题在于类之间调用方法有问题。不知道是什么原因,纠结了一天了,一点进展都没有,求大神指教一下,高分求解,在线等
...全文
150 点赞 收藏 15
写回复
15 条回复
l4kangaxx 2014年01月21日
如果是单线程程序应该是一个很简单的问题,能贴完整的代码么?
回复 点赞
yediguhong 2014年01月18日
你可以把messureControl寫的一個線程中去,這個線程循環檢測數據,有數據就取數據,繪圖[/quote] 这样好烦,有没有他集成的函数,类似于on_horizontalSlider_valueChanged(int value);这样的,一变自己就检测到了,就可以执行某个函数了。我找到了一个void valueChanged(const QVariant & value); 我找到了这个 不知道是不是这么用的?
回复 点赞
只此冒泡君 2014年01月18日
引用 10 楼 yediguhong 的回复:
[quote=引用 9 楼 u012293844 的回复:] 1.我感覺你這兩個類的包含順序反了, 應該是將adcp 放在measureControl類中, 這樣messureControl類去得到adcp中的數據。 2. 或者你可以採取這種方法。 adcp得到數據后存儲在一個文件中, measureControl 去讀文件里的數據來繪圖。
是的 我感觉在另外一个类中能够调用另外一个类的成员变量,但是不能修改另外一个类的成员变量。但是我之所以这样做是因为adcp类是用来接收数据的,一来数据就传给measureControl,measureControl 收到数据就绘图。如果反过来包含的话,我是可以拿到数据,但是不知道什么时候去取、去绘图啊[/quote]你可以把messureControl寫的一個線程中去,這個線程循環檢測數據,有數據就取數據,繪圖
回复 点赞
只此冒泡君 2014年01月18日
引用 13 楼 yediguhong 的回复:
你可以把messureControl寫的一個線程中去,這個線程循環檢測數據,有數據就取數據,繪圖
这样好烦,有没有他集成的函数,类似于on_horizontalSlider_valueChanged(int value);这样的,一变自己就检测到了,就可以执行某个函数了。我找到了一个void valueChanged(const QVariant & value); 我找到了这个 不知道是不是这么用的? [/quote]你用信號和槽函數解決這個問題。
回复 点赞
yediguhong 2014年01月17日
我觉得现在问题精确成了怎么样在一个类里面修改另外一个类的成员变量,我试着修改了一下,在这个类里面输出是变了,但是在原来的类里面还是不变
回复 点赞
yediguhong 2014年01月17日
引用 3 楼 dibase 的回复:
在调用m.getData();之前输出一下,会不会是根本就没有信号推送过来?
有输出的,我试过了,客户端传来的数据一部分是这个类的一部分是另外一个类的,这个类的都显示了,另外一个类的显示不了
回复 点赞
yediguhong 2014年01月17日
引用 2 楼 u012293844 的回复:
1.你可以直接賦值給flowRate 試試, 還有你可以printf 一下list[0].toInt()的結果。 2.你在adbc.cpp 里能不能執行到getData() 這一步沒有?
我单步执行了一下,getdata是进去了,但是里面的操作貌似都没执行
回复 点赞
kara_qin 2014年01月17日
在调用m.getData();之前输出一下,会不会是根本就没有信号推送过来?
回复 点赞
只此冒泡君 2014年01月17日
1.你可以直接賦值給flowRate 試試, 還有你可以printf 一下list[0].toInt()的結果。 2.你在adbc.cpp 里能不能執行到getData() 這一步沒有?
回复 点赞
yediguhong 2014年01月17日
为什么没人回复,自顶一个
回复 点赞
yediguhong 2014年01月17日
引用 8 楼 dibase 的回复:
其实我有点不明白你说的measureControl是原来的类还是adcp是原来的类
adcp类是用来接收数据的,一来数据就传给measureControl类里面
回复 点赞
yediguhong 2014年01月17日
引用 9 楼 u012293844 的回复:
1.我感覺你這兩個類的包含順序反了, 應該是將adcp 放在measureControl類中, 這樣messureControl類去得到adcp中的數據。 2. 或者你可以採取這種方法。 adcp得到數據后存儲在一個文件中, measureControl 去讀文件里的數據來繪圖。
是的 我感觉在另外一个类中能够调用另外一个类的成员变量,但是不能修改另外一个类的成员变量。但是我之所以这样做是因为adcp类是用来接收数据的,一来数据就传给measureControl,measureControl 收到数据就绘图。如果反过来包含的话,我是可以拿到数据,但是不知道什么时候去取、去绘图啊
回复 点赞
只此冒泡君 2014年01月17日
1.我感覺你這兩個類的包含順序反了, 應該是將adcp 放在measureControl類中, 這樣messureControl類去得到adcp中的數據。 2. 或者你可以採取這種方法。 adcp得到數據后存儲在一個文件中, measureControl 去讀文件里的數據來繪圖。
回复 点赞
kara_qin 2014年01月17日
其实我有点不明白你说的measureControl是原来的类还是adcp是原来的类
回复 点赞
kara_qin 2014年01月17日
adcp.h: #include "measureControl.h" public: measureControl m; adcp.cpp: m.setData(list[0].toInt()); m.getData(); measureControl.cpp: void measureControl::setData(int data) { flowRate = data; }; void measureControl::getData(){ sampleID++; repaint( 0, 0, 1000, 600); }
回复 点赞
发动态
发帖子
Qt
创建于2009-11-04

1.0w+

社区成员

2.5w+

社区内容

Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区公告
暂无公告