【问题标题】:Qt: Hide folders in getSaveFileNameQt:隐藏 getSaveFileName 中的文件夹
【发布时间】:2014-04-10 21:02:15
【问题描述】:

我想使用QFileDialog::getSaveFileName 保存文件,但不允许选择路径或至少隐藏文件夹。 阅读文档时,我尝试将QFileDialog::ShowDirsOnly 设置为这样的选项:

QString fileName = QFileDialog::getSaveFileName(this,
                                                tr("..."), path, tr("... (*.txt)"), 0, QFileDialog::ShowDirsOnly);

但它不起作用或者不是我想要的。

有没有一种方法可以保存文件而不需要在系统中查找位置并使用QFileDialog::getSaveFileName?还是我需要构建自己的 QFileDialog,我将在其中写入文件名?

希望有人能理解我的问题。

【问题讨论】:

  • 如果您只希望用户选择文件名,为什么还需要文件对话框?我个人不会使用 QFileDialog,而只是一个自定义输入框。
  • 这是我迄今为止所做的,但我想要一些美观的东西。并使用getSaveFileName 实现这一点,在擦除具有相同名称的文件之前会询问。
  • 您可以使用输入框和消息框来实现。您似乎不想拥有 QFileDialog。您似乎想要一个自定义输入框。
  • 是的,这就是我最终要做的。我只是想我可以避免这种情况。感谢您的帮助。
  • 是的,明白了。顺便说一下,考虑一下未来的 QML。 :-)

标签: c++ qt qtgui qfiledialog qtwidgets


【解决方案1】:

正如评论中所指出的,您正在寻找一种不完全是 QFileDialog 的特定行为,虽然有些相似,但不可否认。

我相信不可能从 QFileDialog 缩小这个功能,所以我会亲自去实现我自己的输入框,并在后台进行所需的健全性检查。

QFileDialog 实现可能会为此类检查提供一些提示,但查看它的源代码并不重要,因为这些操作相对简单。

然后您可以通过消息框提供警告和错误消息。话虽如此,对于 Qt 5 来​​说,考虑使用 QML 进行此类操作可能更有益。

【讨论】:

  • QML 如何在这里提供帮助,而不是在小部件应用程序中看起来“外来”?我还要指出 QFileSystemModel,因为它可以用于自定义选择对话框。 (这也是我的建议)
  • @Frank: 1) 除了 QFileDialog 之外,我没有看到问题中提到的小部件。 2)即使是这样,把它放在qml中更简单恕我直言。 3)QML!=!小部件; qml 只是一种语言。不过,有些人将它与 QtQuick(Controls) 混淆了。可以在 QML 中编写基于小部件的应用程序。 4) QFSM 只是一个模型,而不是一个视图。 5)对于这个简单的案例,我不确定您是否需要它。恕我直言,这有点太重了。
  • QListView + QFSM,还有什么比这更简单的呢?好的,至少在您需要代理模型之前;)。对于单个文件夹,如果不熟悉模型/视图,仅 QDir 加列表视图可能确实更容易。是的,我知道 QML != QtQuick 并且在概念上可以组合 QML + 小部件,只是 Qt 中没有内置支持,所以 user2886875 不太可能走这条路。
  • “概念上可能”我指的是youtube.com/watch?v=NqpJEj15t9Q,顺便说一句。
  • @Frank:输入一行并在“OK”上运行验证更容易,就此而言,QML 和 QtQuick(Controls) 是未来的证明; qtwidgets 不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多