Откройте QFileDialog поверх QQuickItem

0

Я хочу открыть 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

Любая идея, как я могу это решить?

Теги:
qt
qml
qt-quick

1 ответ

1

Просто используйте QML-версию, это абсолютно тот же диалог, который вы получите из диалога на основе QWidget. Единственное, что вы получите от использования диалога, основанного на QWidget - это сделать его обратно, и вы перетащите несколько MB для библиотеки Qt5Widgets.

Независимо от того, что вы думаете, что вы можете получить от желания сделать это, это не будет достойно усилий для этого. Старый QtQuick1 предложил прокси-компонент для отображения виджетов в QML, но это недоступно в QtQuick2, потому что у него другой подход к рендерингу.

  • 0
    Спасибо за ваш ответ, с экономией места без добавления Qt5Widgets у вас есть хорошая мысль. Я просто хочу иметь возможность использовать старые добрые диалоги и начал добавлять этот QFileDialog, не думая делать это в QML. Я попытаюсь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню