2014-11-23 6 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을 전달하면 대화 상자가 모달 대화 상자로 올바르게 열립니다. 그러나 대화 상자를 닫으면 잘못된 창에 초점이 맞춰집니다.

내가 대신 (this-> 창() 창을 통과했지만, 나는 또한는 QWidget에서 해석 할 수 없었던 무엇 QQuickWindow을 보유하고 있습니다.

내가 대신 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을 추가하지 않고 공간을 절약 해 주셔서 감사합니다. 좋은 지적입니다. 그냥 좋은 대화 상자를 사용할 수 있기를 원하며 QMF에서 생각하지 않고이 QFileDialog를 추가하기 시작했습니다. 나는 그것을 시도 할 것이다. –