關於Qt下中靜態變數的使用
阿新 • • 發佈:2021-01-13
技術標籤: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;這樣可以訪問共享變量了
大概就是這樣