找回密码
 立即注册
收起左侧

明明已经改变了全局变量的值,为啥引用的还是原值

10
回复
13012
查看
[复制链接]
累计签到:87 天
连续签到:1 天
来源: 2013-7-7 23:37:17 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 20030969 于 2013-7-8 15:22 编辑

定义了一个全局变量并改变了他的值,
为啥引用的还是原值.....

头文件里写的

extern char *data;//全局变量
CPP里写的
char *data="ABB";//实例化全局变量
然后引用该头文件

dialog.cpp里按个按钮 写入str的值,并关闭该窗口
data =“BBC”
this->close;

mainwindow.cpp里 窗口显示str的值
ui->label->setText(data);
显示的是ABB而不是BBC

最佳答案

查看完整内容

你具体怎么写的代码我也不清楚,我只能是给你提供一个思路。你代码只应该判断dialog什么时候退出了。这个时候你再执行一次ui->label->setText(data);就可以了。没有什么难的,别把问题想的太复杂。
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-7-7 23:37:18 显示全部楼层
你具体怎么写的代码我也不清楚,我只能是给你提供一个思路。你代码只应该判断dialog什么时候退出了。这个时候你再执行一次ui->label->setText(data);就可以了。没有什么难的,别把问题想的太复杂。
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-8 00:08:48 显示全部楼层
测试了下发现
先运行的是mainwindow,再运行dialog,所以先显示的是初值。

但是我设置的是dialog点了关闭才弹出mainwindow的啊……求高手指点!!!!
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-7-8 08:15:38 显示全部楼层
str是什么,你只给str赋值了,并没有给data赋值。还有,楼上说的也有道理,确认一下代码的执行顺序。
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-8 15:24:26 显示全部楼层
hzzhou 发表于 2013-7-8 08:15
str是什么,你只给str赋值了,并没有给data赋值。还有,楼上说的也有道理,确认一下代码的执行顺序。 ...

怎么更改顺序呢?求指点!!
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-7-9 09:38:32 显示全部楼层
我的意思是说,在执行的时候,是先执行了data =“BBC”还是先执行了ui->label->setText(data);这个顺序要先搞明白。
回复

使用道具 举报

累计签到:1571 天
连续签到:1 天
2013-7-9 09:46:10 显示全部楼层
在Qt中存储字符串最好用QString类。在头文件中声明:QString data;
在cpp的构造函数里面初始化:data = “abb“;


CPP里写的
char *data="ABB";//实例化全局变量

你这里这么写,可不可以认为是新建了一个data指针呢。

全局字符串变量,一般不用声明成指针变量的啊。

还有啊,你这个data是在mainwindow类中声明的吧,怎么又在dialog.cpp中使用了呢?


回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-9 23:38:54 显示全部楼层
hzzhou 发表于 2013-7-9 09:38
我的意思是说,在执行的时候,是先执行了data =“BBC”还是先执行了ui->label->setText(data);这个顺序要先 ...

先执行了maindwindow里面的ui->label->setText(data);

但是我需要他先执行dialog里的那个
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-9 23:39:53 显示全部楼层
yafeilinux 发表于 2013-7-9 09:46
在Qt中存储字符串最好用QString类。在头文件中声明:QString data;
在cpp的构造函数里面初始化:data = “ ...

因为我申明的是全局变量extern

我想在dialog里改变他,并关闭dialog

然后再mainwindow里面引用改变后的他
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-7-9 23:45:03 显示全部楼层
20030969 发表于 2013-7-9 23:38
先执行了maindwindow里面的ui->label->setText(data);

但是我需要他先执行dialog里的那个 ...

在关闭dialog以后,你可以再执行一次maindwindow里面的ui->label->setText(data);
这样你才能重新给label设置上新的字符串。因为label->setText(data);的时候会把data指向的字符串复制一次,并保存在了label里, 你需要重新进行setText()操作才可以。
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-10 01:18:28 显示全部楼层
hzzhou 发表于 2013-7-9 23:45
在关闭dialog以后,你可以再执行一次maindwindow里面的ui->label->setText(data);
这样你才能重新给label ...

详细该怎么写……麻烦说下我菜鸟啊@@谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了