繁体   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