在QQuickItem上打开QFileDialog

时间:2014-11-23 13:41:16

标签: c++ qt qml qt-quick

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

任何想法我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

只需使用QML版本,它就可以从基于QWidget的对话框中获得完全相同的对话框。使用基于QWidget的对话框唯一可以获得的就是向后移动,然后为Qt5Widgets库拖动几个MB。

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