社区
Qt
帖子详情
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
打赏
收藏
QT开发
各位大哥大姐求救 我学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中体现不出来呢 这个问题要怎么解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
Qt
5.9 C++
开发
指南.pdf 及示例源码
Qt
5.9 C++
开发
指南.pdf 及示例源码
Qt
入门中文资料
Qt
从入门到精通
c++
Qt
中文入门教程,从
Qt
入门到
Qt
的深入研究。
QT
5串口上位机实现 源码
通过几天的学习,自己也写了一个串口通信的上位机,比较简易,希望可以给大家带来帮助
Qt
Creator 系列教程
全面介绍
Qt
集成
开发
环境
Qt
Creator从安装到
开发
各个步骤的一系列教程
VS2019
Qt
开发
环境搭建与配置
Qt
是很优秀的图形界面跨平台
开发
框架,
开发
语言可以用C++, 也可以用python, 建议使用C++。windows上
Qt
开发
环境可以使用
Qt
Creator, 也可以使用VS +
Qt
, VS
开发
调试功能强大,本篇介绍VS2019 +
Qt
5.14
开发
环境的配置, 其它版本的类似。 VS下载链接:https://visualstudio.microsoft.com/zh-hans/vs/ VS2019 C++主要安装模块: 不............
Qt
16,235
社区成员
26,649
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章