2013-12-12 57 views
0
#include <QApplication> 
int main() { 
    QApplication::setStyle("windows"); 
    QApplication::setStyle("windows"); 
} 

該程序產生Segmentation fault (core dumped)。我的qmake版本是4.7.2。這是一個Qt錯誤還是我的版本太舊?將QApplication :: style設置兩次後程序崩潰

回答

2

在設置樣式之前,您必須先創建一個QApplication的實例。從文檔

所有權的樣式對象的轉移到QApplication的,所以 的QApplication會刪除樣式對象的應用程序退出時或 新的樣式設置和舊的風格仍然是 應用程序的父目的。

我假設它正在崩潰,因爲沒有QApplication獲取樣式的所有權。一般來說,創建QApplication是你應該做的第一件事情之一。

#include <QApplication> 
int main() { 
    QApplication a(argc, argv); 
    QApplication::setStyle("windows"); 
    QApplication::setStyle("windows"); 
} 
+0

你能解釋一下,爲什麼如果函數需要一個對象時它是靜態的? – Ashot

+1

我不知道Qt的歷史,但我認爲它們是靜態的,所以你可以從任何地方訪問QApplication。 QApplication具有由構造函數設置的靜態自變量,以便靜態函數可以訪問應用程序實例。在構造函數之前調用的任何靜態函數都會獲得一個NULL指針。不是最好的設計,但我確信當時有一個原因。如果你不得不調用QApplication :: instance() - > setStyle()或類似的東西,那會更清楚。 –