我正在使用非原生的QFileDialog
(用于选择目录路径)并且我需要添加一些自定义驱动器。我现在甚至不需要显示这些驱动器中的任何内容,我只需要在顶层显示这些驱动器(最好带有我的图标)并在用户选择它时在结果中输出一些特殊字符串。
实现这个最简单的方法是什么?
我已在 documentation 中阅读该代理模型可用于该目的,但我不明白如何实现此类模型,所有示例仅显示对已可用项目的过滤和排序。
最佳答案
如果我没理解错的话,您想将其他驱动器添加到文件对话框左侧的侧边栏吗?
你要找的函数是QFileDialog::setSidebarUrls
#include <QApplication>
#include <QMainWindow>
#include <QHBoxLayout>
#include <QPushButton>
#include <QFileDialog>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QMainWindow window;
QWidget widget;
QHBoxLayout layout(&widget);
QPushButton open("open");
layout.addWidget(&open);
QObject::connect(&open, &QPushButton::clicked, [&]()
{
QFileDialog dialog;
dialog.setOption(QFileDialog::DontUseNativeDialog);
QList<QUrl> drives;
drives << QUrl::fromLocalFile(QDir("D:").absolutePath());
drives << QUrl::fromLocalFile(QDir("E:").absolutePath());
drives << QUrl::fromLocalFile(QDir("foobar").absolutePath());
dialog.setSidebarUrls(drives);
dialog.exec();
});
window.setCentralWidget(&widget);
window.show();
return app.exec();
}
结果如下图所示:
但是,如果您添加的驱动器不存在/不可访问,则它们将显示为灰色。
关于c++ - 如何向 QFileDialog 添加自定义项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44568065/