天天看點

Qt中關于檔案對話框QFileDialog屬性option以及對其qss樣式修改

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,彈出一個檔案對話框。

Qt中關于檔案對話框QFileDialog屬性option以及對其qss樣式修改

其實這個時候打開的檔案對話框可以了解為本地系統的檔案對話框,無論對其怎麼修改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。

Qt中關于檔案對話框QFileDialog屬性option以及對其qss樣式修改

Option是一個enum變量,其中有一個QFileDialog的屬性是QFileDialog::DontUseNativeDialog,不要使用本機檔案件對話框,預設情況下該屬性是false。

在getOpenFileName函數中最後一個參數傳入QFileDialog::DontUseNativeDialog。

QString fileName = QFileDialog::getOpenFileName(this, "select file", ".", "*", , QFileDialog::DontUseNativeDialog);
           

這個時候重新編譯運作一下Demo,會發現點選pushButton後打開的檔案對話框與之前的不同了。

Qt中關于檔案對話框QFileDialog屬性option以及對其qss樣式修改

這個時候再在父界面中對QFileDialog設定qss就會有效果了。

QFileDialog {
    background-color:red;
}
           

例如這裡對QFileDialog的背景色設定為紅色,看看效果。

Qt中關于檔案對話框QFileDialog屬性option以及對其qss樣式修改

繼續閱讀