Я хочу открыть QFileDialog через QQuickItem.
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 File-Dialog. 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
- это сделать его обратно, и вы перетащите несколько MB для библиотеки Qt5Widgets
.
Независимо от того, что вы думаете, что вы можете получить от желания сделать это, это не будет достойно усилий для этого. Старый QtQuick1 предложил прокси-компонент для отображения виджетов в QML, но это недоступно в QtQuick2, потому что у него другой подход к рендерингу.