【问题标题】:Open a QFileDialog over a QQuickItem在 QQuickItem 上打开 QFileDialog
【发布时间】:2014-11-23 13:41:15
【问题描述】:

我想在 QQuickItem 上打开 QFileDialog。

 void
 MyCoolQQuickItem::loadFileDialog()
 {
   QString filename = QFileDialog::getOpenFileName(this, "Open a file", 
                      "C:\\path to my stuff\\", "*.*");
   if(filename.size()>0) {
     // load file and do stuff
   }
 }

MyCoolQQuickItem 是 QQuickItem 的子类。 并且 QFileDialog::getOpenFileName 需要一个 QWidget* 作为父级。如果我改为传递 null_ptr,则对话框会作为模态对话框正确打开。但是在我关闭对话框后,错误的窗口获得了焦点。

我尝试传递窗口而不是(this->window(),但我有一个 QQuickWindow,在 QWidget 中也无法解析。

我可以改用 QML 文件对话框。 http://qt-project.org/doc/qt-5/qml-qtquick-dialogs-filedialog.html

但我想在这里使用 QFileDialog。 http://qt-project.org/doc/qt-5/qfiledialog.html

有什么办法可以解决这个问题吗?

【问题讨论】:

    标签: c++ qt qml qt-quick


    【解决方案1】:

    只需使用 QML 版本,它与您从基于 QWidget 的对话框中获得的对话框完全相同。使用基于QWidget 的对话框的唯一好处是您将使其向后移动,并为Qt5Widgets 库拖动几个MB。

    无论您认为想要这样做可能会获得什么,都不值得为此付出努力。旧的 QtQuick1 提供了一个代理组件来在 QML 中显示小部件,但 QtQuick2 不提供此功能,因为它具有不同的渲染方法。

    【讨论】:

    • 感谢您的回答,在不添加 Qt5Widgets 的情况下节省空间,您有一个好处。我只是希望能够使用良好的旧对话框并开始添加此 QFileDialog 而无需考虑在 QML 中进行操作。我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多