1. 程式人生 > 其它 >關於Qt下中靜態變數的使用

關於Qt下中靜態變數的使用

技術標籤:ffmpeg相關問題Qt下靜態變數的使用

需求是這樣的,在主視窗類Widget中啟動一個子執行緒去執行錄音操作,然後使用共享的靜態變數來結束錄音,在Widget類中發出停止命令,MyThread類則停止錄音操作,

status定義:

class MyThread : public QObject
{
    Q_OBJECT
public:
    explicit MyThread(QObject *parent = nullptr);
    AVFormatContext* open_media(); //開啟音訊裝置

    static int status;//用於控制錄製

只截了一部分程式碼,status是定義在MyThread類中的一個靜態成員變數,在裡面不能進行初始化如:

static int status = 0;//用於控制錄製

編譯器會報錯:可以自己嘗試一下。

在使用靜態變數之前必須進行初始化,如果不進行初始化的話就會報錯:

就像這樣的錯誤,那麼初始化在哪裡呢?我是直接在main函式前面進行初始化的:

#include "widget.h"

#include <QApplication>

int MyThread::status = 0;//初始化狀態變數
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

在其他檔案中如果要使用MyThread裡面的靜態成員變數status,必須包含相應的標頭檔案,使用方式MyThead::status = 1;這樣可以訪問共享變量了

大概就是這樣