简体   繁体   中英

How to set stylesheet on QFileDialog?

I'm trying to set my QFileDialog style sheet but is has not effect. Here is the code:

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

Any ideas why this don't work?

Calling setStylesheet on an instance of QFileDialog has no effect when you use the static functions . Those functions will create their own internal file-dialog, and so the stylesheet will be ignored.

If you want to use your own stylesheet, you will need to use the file-dialog instance you created:

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

However, this may mean that you get Qt's built-in file-dialog, rather than your platform's native file-dialog.

PS:

If you do get the native file-dialog and the stylesheet has no effect on it, the only work-around will be to fallback to Qt's built-in file-dialog. To do that, just add this line:

    dial.setOption(QFileDialog.DontUseNativeDialog)

I recommend to always set parents and use the inheritance of style sheets wherever possible. That way you can also use the static functions of QFileDialog .

I can confirm ekhumoros suspicion that the native file-dialog ignores the stylesheet. It indeed does on Windows.

Here the example using the Qt's built-in file-dialog.

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_()

which looks like

在此处输入图片说明

Also for C++ version , the DontUseNativeDialog option works fine.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM