2014-11-23 3 views
0

Я хочу открыть QFileDialog через QQuickItem.Откройте 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- окно>(), но у меня есть 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

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

ответ

1

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

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

+0

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

Смежные вопросы