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 = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
其实这里就可以看到最后一个参数Option options = 0,跳转到Option。
Option是一个enum变量,其中有一个QFileDialog的属性是QFileDialog::DontUseNativeDialog,不要使用本机文件件对话框,默认情况下该属性是false。
在getOpenFileName函数中最后一个参数传入QFileDialog::DontUseNativeDialog。
QString fileName = QFileDialog::getOpenFileName(this, "select file", ".", "*", 0, QFileDialog::DontUseNativeDialog);
这个时候重新编译运行一下Demo,会发现点击pushButton后打开的文件对话框与之前的不同了。
这个时候再在父界面中对QFileDialog设置qss就会有效果了。
QFileDialog {
background-color:red;
}
例如这里对QFileDialog的背景色设置为红色,看看效果。