1.概述
在Qt中使用QFileDialog中的static函數getOpenFileName和getOpenFileNames函數可以打開檔案對話框并傳回選中的檔案名,但是有時候會考慮到修改QFileDialog的qss樣式表去使打開的檔案對話框的樣式與父界面的樣式保持一緻,這時候會發現無論是繼承QFileDialog并對其設定qss還是在他的父界面中直接對其設定qss樣式表都沒有效果,這裡我們就來解決這個問題。
2.解決
這裡我們先寫一個Demo,在widget中添加一個pushButton,在pushButton的槽函數中去打開QFileDialog。
QString fileName = QFileDialog::getOpenFileName(this, "select file", ".", "*");
編譯後運作Demo,點選pushButton,彈出一個檔案對話框。
其實這個時候打開的檔案對話框可以了解為本地系統的檔案對話框,無論對其怎麼修改qss樣式表都不會有任何的效果。
可以來看一下Qt文檔中對getOpenFileName函數的描述。
QString QFileDialog::getOpenFileName(QWidget * parent = , const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = , Options options = )
其實這裡就可以看到最後一個參數Option options = 0,跳轉到Option。
Option是一個enum變量,其中有一個QFileDialog的屬性是QFileDialog::DontUseNativeDialog,不要使用本機檔案件對話框,預設情況下該屬性是false。
在getOpenFileName函數中最後一個參數傳入QFileDialog::DontUseNativeDialog。
QString fileName = QFileDialog::getOpenFileName(this, "select file", ".", "*", , QFileDialog::DontUseNativeDialog);
這個時候重新編譯運作一下Demo,會發現點選pushButton後打開的檔案對話框與之前的不同了。
這個時候再在父界面中對QFileDialog設定qss就會有效果了。
QFileDialog {
background-color:red;
}
例如這裡對QFileDialog的背景色設定為紅色,看看效果。