QT开发

GANZHIABC 2011-08-04 11:51:11
各位大哥大姐求救 我学QT不久, 遇到一个问题全局变量的问题 请大哥大姐指点
万分感谢!

我在a.h中定义了一个类cla,在a.cpp中 赋了初值:
a.h :


class cla{
publilc:
static int num;
}

a.cpp:

int cla::num=0;

然后将num做为全局变量使用 ,但是为什么在b.cpp中修改了num的值 却 在c.cpp中体现不出来呢
这个问题要怎么解决?
...全文
113 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dxms8 的回复:]
调用顺序正确吗
[/Quote]

恩 调用顺序没什么问题
dxms8 2011-08-04
  • 打赏
  • 举报
回复
调用顺序正确吗
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yiyaaixuexi 的回复:]
qDebug输出吧


qDebug()<<"what what: "<< 变量或者方法返回直;
[/Quote]


有值输出了 哎呀 太感谢啦 非常感谢!
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yiyaaixuexi 的回复:]
qDebug输出吧


qDebug()<<"what what: "<< 变量或者方法返回直;
[/Quote]

恩 我试试! 真是万分感谢呀!
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dxms8 的回复:]
....qtCreator最下面一行有4个标签的撒。。。打开那个application output就行,如果有printf会在那儿显示。
[/Quote]


哎呦 在那儿显示呀
但是我的程序仍然没有任何显示 估计程序有问题
念茜 2011-08-04
  • 打赏
  • 举报
回复
qDebug输出吧


qDebug()<<"what what: "<< 变量或者方法返回直;
dxms8 2011-08-04
  • 打赏
  • 举报
回复
....qtCreator最下面一行有4个标签的撒。。。打开那个application output就行,如果有printf会在那儿显示。
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 dxms8 的回复:]
你如果用qtcreator的话应该在application output里面有输出printf的内容。
多看看qt文档,我刚做qt的时候也完全没人教,纯粹自学,qt算简单的啦~~
[/Quote]

这个application output 怎么用呀?
我之前是这样用的:
printf("%d",num);
fflush(stdout);
dxms8 2011-08-04
  • 打赏
  • 举报
回复
你如果用qtcreator的话应该在application output里面有输出printf的内容。
多看看qt文档,我刚做qt的时候也完全没人教,纯粹自学,qt算简单的啦~~
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dxms8 的回复:]
这不是包不包这个头文件的问题哈,你要用到这个变量的话肯定要包的咯。
而这个变量的值具体是多少当然是依据程序流程中的赋值了。
[/Quote]

我又改了改我的程序 这次感觉应该修改了那个全局变量的值 但是在另外一个文件中怎么就体现不出来这个全局变量被修改了呀
还有就是 我用printf 调试 怎么屏幕上就是没有信息 就一堆对话框.......
哎呀 头疼
刚出来工作 刚接触QT 公司连个可以请教的人都没有.........
dxms8 2011-08-04
  • 打赏
  • 举报
回复
这不是包不包这个头文件的问题哈,你要用到这个变量的话肯定要包的咯。
而这个变量的值具体是多少当然是依据程序流程中的赋值了。
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dxms8 的回复:]
引用 10 楼 ganzhiabc 的回复:
引用 9 楼 dxms8 的回复:
检查下信号槽有没有连对,赋值什么的应该没什么问题



我感觉那全局变量的值没有变 没有任何变化

那要么就是没有调那函数,要么就是没有进那些if条件,这些只有lz自己好好检查下了。
[/Quote]


我在问你个问题吧 谢谢你啦
在单独的一个.h .cpp中定义一个全局变量并且初始化为0,
若以一个文件包含这个头文件后,修改了这个全局变量的值,改为了1, 另外一个文件再包含这个全局变量的头文件时它的值是 1 还是 0 呀?
dxms8 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ganzhiabc 的回复:]
引用 9 楼 dxms8 的回复:
检查下信号槽有没有连对,赋值什么的应该没什么问题



我感觉那全局变量的值没有变 没有任何变化
[/Quote]
那要么就是没有调那函数,要么就是没有进那些if条件,这些只有lz自己好好检查下了。
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dxms8 的回复:]
检查下信号槽有没有连对,赋值什么的应该没什么问题
[/Quote]


我感觉那全局变量的值没有变 没有任何变化
dxms8 2011-08-04
  • 打赏
  • 举报
回复
检查下信号槽有没有连对,赋值什么的应该没什么问题
dxms8 2011-08-04
  • 打赏
  • 举报
回复
你直接在main里面写printf看看,如果真无法看到printf的话你只能去检查代码了。
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dxms8 的回复:]
printf之后写fflush(stdout);
[/Quote]

帮我看看问题出哪儿了呗 谢谢了! 万分感谢!

源代码如下:

全局变量定义:
.h文件:
#ifndef LAYOUT_H
#define LAYOUT_H

class layout {
public:
static int num;
};

#endif

.cpp文件:
#include "layout.h"

int layout::num = 0;




修改全局变量值的文件:
.h文件:

#ifndef PICLAYOUTDLG_H
#define PICLAYOUTDLG_H

#include <QDialog>
#include <QtGui>

namespace Ui {
class piclayoutDlg;
}

class piclayoutDlg : public QDialog
{
Q_OBJECT

public:

explicit piclayoutDlg(QWidget *parent = 0);
~piclayoutDlg();

private:
Ui::piclayoutDlg *ui;

private slots:
void on_pushButton_clicked();
};

#endif



.cpp文件:

#include "piclayoutdlg.h"
#include "ui_piclayoutdlg.h"

#include "layout.h"

class layout;

piclayoutDlg::piclayoutDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::piclayoutDlg)
{
ui->setupUi(this);




ui->label->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label->setLineWidth(2);
ui->label_2->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_2->setLineWidth(2);
ui->label_3->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_3->setLineWidth(2);
ui->label_4->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_4->setLineWidth(2);
ui->label_5->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_5->setLineWidth(2);
ui->label_6->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_6->setLineWidth(2);
ui->label_7->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_7->setLineWidth(2);
ui->label_8->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_8->setLineWidth(2);
ui->label_9->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_9->setLineWidth(2);
ui->label_10->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_10->setLineWidth(2);
ui->label_11->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_11->setLineWidth(2);
ui->label_12->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_12->setLineWidth(2);
ui->label_13->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_13->setLineWidth(2);
ui->label_14->setFrameStyle(QFrame::Panel | QFrame::Plain);
ui->label_14->setLineWidth(2);

}



piclayoutDlg::~piclayoutDlg()
{
delete ui;
}

void piclayoutDlg::on_pushButton_clicked()
{

if(ui->radioButton->isDown() == true){
layout::num = 1;

}else if(ui->radioButton_2->isDown() == true){
layout::num = 2;

}else if(ui->radioButton_3->isDown() == true){
layout::num = 3;

}else if(ui->radioButton_4->isDown() == true){
layout::num = 4;

}else if(ui->radioButton_5->isDown() == true){
layout::num = 5;

}


printf("%d\n",layout::num);
fflush(stdout);

accept();

}


根据全局变量的值的不同做出相应变化的文件:

.h文件:

#ifndef RECDLG_H
#define RECDLG_H

#include <QDialog>

#include "camerdlg.h"
#include "bzsxdlg.h"
#include "picoptdlg.h"
#include "viopradlg.h"
#include "cloprodlg.h"
#include "telnetdlg.h"
#include "lookdlg.h"
#include "piclayoutdlg.h"

namespace Ui {
class recDlg;
}

class recDlg : public QDialog
{
Q_OBJECT

public:
explicit recDlg(QWidget *parent = 0);

~recDlg();

private:
Ui::recDlg *ui;
bzsxDlg stdsx_n;
camerDlg camerdlg;
picoptDlg picoptdlg;
viopraDlg viopradlg;
cloproDlg clopradlg;
telnetDlg telnetdlg;
lookDlg lookdlg; /* new */
piclayoutDlg piclayout;

piclayoutDlg *piclayoutdlg;

private slots:

void on_pushButton_5_clicked();
void on_pushButton_9_clicked();
void on_pushButton_12_clicked();
void on_pushButton_10_clicked();
void on_pushButton_7_clicked();
void on_pushButton_6_clicked();
void on_pushButton_4_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
};

#endif // RECDLG_H

.cpp 文件:

#include "recdlg.h"
#include "ui_recdlg.h"

#include "camerdlg.h"
#include "picoptdlg.h"
#include "piclayoutdlg.h"
#include <QtGui>

#include "layout.h"
class layout;
//extern static int num;


recDlg::recDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::recDlg)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint); // 去掉标题栏


QHBoxLayout *horizontalLayout_11 = new QHBoxLayout;
horizontalLayout_11->addWidget(ui->pushButton_9);
horizontalLayout_11->addWidget(ui->pushButton_10);


QHBoxLayout *horizontalLayout_12 = new QHBoxLayout;
horizontalLayout_12->addWidget(ui->pushButton_11);
horizontalLayout_12->addWidget(ui->pushButton_12);



ui->verticalLayout_3->addWidget(ui->groupBox_3);
ui->verticalLayout_3->addLayout(ui->horizontalLayout_10);
ui->verticalLayout_3->addLayout(horizontalLayout_11);
ui->verticalLayout_3->addLayout(horizontalLayout_12);

// QDesktopWidget *desktop = QApplication::desktop();



QHBoxLayout *horizontalLayout_13 = new QHBoxLayout;
horizontalLayout_13->addWidget(ui->label_3);
horizontalLayout_13->addWidget(ui->horizontalSlider);


QHBoxLayout *horizontalLayout_14 = new QHBoxLayout;
horizontalLayout_14->addWidget(ui->label_4);
horizontalLayout_14->addWidget(ui->horizontalSlider_2);


}

recDlg::~recDlg()
{
delete ui;
}

void recDlg::on_pushButton_3_clicked()
{
// accept();

hide(); //隐藏当前对话框
stdsx_n.showFullScreen(); //全屏显示案件信息

if(stdsx_n.exec()==QDialog::Accepted){
showFullScreen(); //返回时仍然全屏显示案件信息
}
}

void recDlg::on_pushButton_2_clicked()
{

camerdlg.show(); //显示摄像机设置页面 全屏会不会很难看
}

void recDlg::on_pushButton_4_clicked()
{
picoptdlg.show(); //显示画面选择页面 全屏会不会很难看
}

void recDlg::on_pushButton_6_clicked() //点击视频参数控制按钮时显示视频参数控制页面
{
viopradlg.show(); //全屏会不会很难看
}

void recDlg::on_pushButton_7_clicked() //点击云台参数是显示云台参数页面
{
clopradlg.show(); //全屏会不会很难看
}

void recDlg::on_pushButton_10_clicked() //退出视频录制页面
{
close();
}

void recDlg::on_pushButton_12_clicked() //显示远程指挥页面
{
telnetdlg.showFullScreen();
/* new */
if(telnetdlg.exec()==QDialog::Accepted){ //同意后
close();
lookdlg.showFullScreen(); //全屏显示
}
}

void recDlg::on_pushButton_9_clicked() //返回功能模块页面
{
close();
accept();
}

void recDlg::on_pushButton_5_clicked() // 按下画面选择按钮
{
piclayout.show();
if(layout::num == 1 && piclayout.exec() == QDialog::Accepted ){

ui->pushButton_12->hide();
ui->groupBox_3->hide(); // ?
}

}
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dxms8 的回复:]
printf之后写fflush(stdout);
[/Quote]


我刚才试了 什么也没显示出来呀 没有反应
dxms8 2011-08-04
  • 打赏
  • 举报
回复
printf之后写fflush(stdout);
GANZHIABC 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dxms8 的回复:]
没有代码很难判断丫,建议lz在赋值和取值的地方都用printf把当前值打出来看看,调试下。
[/Quote]

我用printf打过一次当前值 但是运行的时候没有显示出来呀 我是在windows环境下装的QT Creator,然后写的程序 这个怎么办呀?
加载更多回复(1)

16,235

社区成员

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

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