• 5168阅读
  • 9回复

[提问]明明已经改变了全局变量的值,为啥引用的还是原值 [复制链接]

上一主题 下一主题
离线200300969
 

只看楼主 倒序阅读 楼主  发表于: 2013-07-08
本帖最后由 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

测试了下发现先运行的是mainwindow,再运行dialog,所以先显示的是初值。但是我设置的是dialog点了关闭才弹出mainwindow的啊……求高手指点!!!!

离线XChinux

只看该作者 1楼 发表于: 2013-07-08
把你全部相关代码帖上来吧.按你最后的描述,这是正确的.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线200300969

只看该作者 2楼 发表于: 2013-07-09
str.h
extern char *usrStr;//全局变量
str.cpp
char *usrStr="ABB";//实例化全局变量
login.cpp
QSqlQuery query;//数据库
        query.exec(QObject::tr("select num,id,pwd, usradmin , name from userdata"));
         int flag=0;//循环
         while(query.next())        {
        qDebug() << query.value(0).toInt() << query.value(1).toString()<<query.value(2).toString()<<query.value(3).toString();
        if ( ui->userLineEdit->text()==query.value(1).toString() &&
             ui->pwdLineEdit->text()==query.value(2).toString())
        {
         int fieldNo = query.record().indexOf("usradmin");
            str = query.value(fieldNo).toString();
            QByteArray ba =query.value(fieldNo).toString().toLatin1();//QString转为QByteArray
            usrStr=ba.data();//QByteArray 转为char
            flag=1;
            QDialog::accept();
            }
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
   ui(new Ui::MainWindow)
{
     //QString qusrStr =QString(QLatin1String(usrStr));//char 转为QString
     ui->label_9->setText(usrStr);
}
离线200300969

只看该作者 3楼 发表于: 2013-07-09
回 1楼(XChinux) 的帖子
贴上来了 ,debug发现mainwindow里面的usrStr先出来 随后才是dialog的usrStr出来……是不是顺序有问题?但是实际上先显示的确实dialog啊……
离线XChinux

只看该作者 4楼 发表于: 2013-07-09
最关键的你没帖啊,mainwindow先构建(但此时还没显示),你的logindialog后构建,但先显示了,对话框关闭后,你的mainwndow才show() 的。可能是这样。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线200300969

只看该作者 5楼 发表于: 2013-07-10
回 4楼(XChinux) 的帖子
这个次序怎么调整?在哪看?我是新手……是在main.cpp里看吗?
离线XChinux

只看该作者 6楼 发表于: 2013-07-10
把你全部代码搬上来
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线彩阳

只看该作者 7楼 发表于: 2013-07-10
比较难理解。我建议这样可以不定义一个全局变量,定义一个QString类型的成员变量如何?
上海Qt开发联盟,热忱地欢迎你的加入!
离线xlqwe

只看该作者 8楼 发表于: 2013-07-10
usrStr=ba.data();这个赋值的是指针吧,这个指针出了函数区域就失效了,既然用了qt,为什么还要用char *呢
离线xlqwe

只看该作者 9楼 发表于: 2013-07-10
如果实在要用char* 只能使用strcpy,用QString吧,很爽的
快速回复
限100 字节
 
上一个 下一个