在 QQuickItem 上打开 QFileDialog

Open a QFileDialog over a QQuickItem

本文关键字:QFileDialog QQuickItem      更新时间:2023-10-16

我想在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
   }
 }

My 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

知道我该如何解决这个问题吗?

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

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