簡體   English   中英

如何在 QFileDialog 上設置樣式表?

[英]How to set stylesheet on QFileDialog?

我正在嘗試設置我的QFileDialog樣式表,但沒有效果。 這是代碼:

dial = QFileDialog()
dial.setStyleSheet(self.styleSheet())
path = dial.getOpenFileName(self, "Specify File")

任何想法為什么這不起作用?

使用 靜態函數時,在QFileDialog的實例上調用setStylesheet無效。 這些函數將創建它們自己的內部文件對話框,因此樣式表將被忽略。

如果您想使用自己的樣式表,則需要使用您創建的文件對話框實例:

    dial = QFileDialog()
    dial.setStyleSheet(self.styleSheet())
    dial.setWindowTitle('Specify File')
    dial.setFileMode(QFileDialog.ExistingFile)
    if dial.exec_() == QFileDialog.Accepted:
        path = dial.selectedFiles()[0]

但是,這可能意味着您將獲得 Qt 的內置文件對話框,而不是您平台的本機文件對話框。

PS:

如果您確實獲得了本機文件對話框並且樣式表對其沒有影響,則唯一的解決方法是回退到 Qt 的內置文件對話框。 為此,只需添加以下行:

    dial.setOption(QFileDialog.DontUseNativeDialog)

我建議始終設置父項並盡可能使用樣式表的繼承。 這樣你也可以使用QFileDialog的靜態函數。

我可以確認ekhumoros 懷疑本機文件對話框忽略了樣式表。 在 Windows 上確實如此。

這里的示例使用 Qt 的內置文件對話框。

from PyQt5 import QtWidgets

def show_file_dialog():
    QtWidgets.QFileDialog.getOpenFileName(b, options=QtWidgets.QFileDialog.DontUseNativeDialog)

app = QtWidgets.QApplication([])

b = QtWidgets.QPushButton('Test')
b.setStyleSheet("QWidget { background-color: yellow }")
b.clicked.connect(show_file_dialog)
b.show()

app.exec_()

看起來像

在此處輸入圖片說明

同樣對於 C++ 版本, DontUseNativeDialog 選項工作正常。

QString text = QFileDialog::getOpenFileName(parent,
                                                        tr("title message"),
                                                        folder_path_string,
                                                        tr("filter (*.extension)"),
                                                        nullptr,
                                                        QFileDialog::DontUseNativeDialog);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM