c++ - 如何向 QFileDialog 添加自定义项?

标签 c++ windows qt

我正在使用非原生的QFileDialog(用于选择目录路径)并且我需要添加一些自定义驱动器。我现在甚至不需要显示这些驱动器中的任何内容,我只需要在顶层显示这些驱动器(最好带有我的图标)并在用户选择它时在结果中输出一些特殊字符串。

enter image description here

实现这个最简单的方法是什么?

我已在 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();
}

结果如下图所示:

enter image description here

但是,如果您添加的驱动器不存在/不可访问,则它们将显示为灰色。

关于c++ - 如何向 QFileDialog 添加自定义项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44568065/

相关文章:

android - 无法从桌面套件更改为 Android 套件

c++ - 当 shared_ptr 重置为包含的相同地址时,是否保证 weak_ptr 会过期?

c++ - 间接运算符的 C++ 标准描述是否保证不会优化内存写入?

windows - Server 2012事件日志转发

python - Python访问SVN报错

qt - 在Qt中,如何使一个窗口成为当前窗口?

c++ - 在 VIsual Studio 错误 NewFolder 中运行 MFC C++ 代码不是有效的工作目录

c++ - CryptGenRandom 输出与 rand() 调用不同

qt - 从 qstandarditemmodel 数据形成树结构

c++ - QML 文件浏览器 QDirModel 与 QFileSystemModel