我想在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
任何想法我怎么能解决这个问题?
答案 0 :(得分:1)
只需使用QML版本,它就可以从基于QWidget
的对话框中获得完全相同的对话框。使用基于QWidget
的对话框唯一可以获得的就是向后移动,然后为Qt5Widgets
库拖动几个MB。
无论你认为自己想要做什么可能会获得什么,都不值得付出努力。旧的QtQuick1提供了一个代理组件来显示QML中的小部件,但是这不适用于QtQuick2,因为它有不同的渲染方法。