这个例子的用途:
将 MainWindow 的 statuBar指针开放出来,使得所有的 cpp都能够使用这个 statuBar。
1. 一般指针全局变量的定义方法
//1. 声明:在适当的地方进行
extern QStatusBar *pMainWindowStatuBar;
//2. 定义:
QStatusBar *pMainWindowStatuBar =nullptr;
//3. 初始化
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);pMainWindowStatuBar =ui->statusBar;
//4. 使用
pMainWindowStatuBar->showMessage("Test");
2. 在“类”中定义静态指针变量的方法
关键:理解在类中定义 与 C语言定义,在方法的差异
static QStatusBar *pMainWindowStatuBar; // 声明。需要 static
QStatusBar * MainWindow::pMainWindowStatuBar =nullptr; //定义
NG: static QStatusBar * MainWindow::pMainWindowStatuBar =nullptr; //错误,这里不需要 static,否则,Qt Creator会报错。
关键区别:在 C语言中的定义,与在 C++中的声明之区分。
- x1. C语言定义:static QStatusBar *pMainWindowStatuBar; // 这是定义。
- x2. C++声明:static QStatusBar *pMainWindowStatuBar; // 在类内,这是声明。
- x3. C++定义:QStatusBar * MainWindow::pMainWindowStatuBar =nullptr; //定义。不需要 static
- x1 和 x2 :静态的“C语言定义” 和 类内静态的 “C++声明”,在外形上是一致的?
- C语言声明:需要使用 extern关键字。 C++在这里不能使用 extern;但在使用时,需要加上::,这是C++里的"作用域分解运算符"。
//1. 声明:mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
MainWindow(QWidget *parent = nullptr);
~MainWindow();public:
static QStatusBar *pMainWindowStatuBar; // 声明
//2. 定义:mainwindow.cpp
QStatusBar * MainWindow::pMainWindowStatuBar =nullptr;
//3. 初始化:mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);MainWindow::pMainWindowStatuBar =ui->statusBar; //初始化
//4. 使用
MainWindow::pMainWindowStatuBar->showMessage("Test 222222");
参考:
2.1、声明静态成员
class Test {
public:
Test();
~Test();
//声明一个本类的静态指针
static Test *test;
}
2.2、定义并初始化静态成员(类外)
#include "Test.h"
//定义并初始化静态成员
Test* Test::test = NULL;
Test::Test()
{
}
Test::~Test()
{
}