2014-11-23 81 views
0

我想通過QQuickItem打開QFileDialog。通過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 
    } 
} 

My MyCoolQQuickItem是QQuickItem的子類。 而QFileDialog :: getOpenFileName需要QWidget *作爲父項。如果我改爲傳遞null_ptr,則該對話框將以模態對話框的形式正確打開。但是當我關閉對話框後,錯誤的窗口變得焦點了。

我試圖通過窗口,而不是(這 - >窗口(),但我有一個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

只需使用QML版本,這是絕對的您將從基於QWidget的對話框中獲得相同的對話框。使用基於QWidget的對話框將會獲得的唯一一件事是您將使其向後移動,並且您將爲Qt5Widgets庫拖動幾個MB。

無論你認爲自己想要這樣做,可能會得到什麼,它不值得努力去做。舊的QtQuick1提供了一個用QML顯示小部件的代理組件,但QtQuick2並不提供這種組件,因爲它具有不同的渲染方法。

+0

感謝您的回答,在不添加Qt5Widgets的情況下節省空間,您有一個很好的觀點。 我只是想能夠使用良好的舊對話框,並開始添加此QFileDialog,而不用考慮在QML中執行此操作。 我會試試看。 – 2014-11-23 22:13:35