2012-12-22 3 views
4

Qt5와 QtQuick2의 조합에는 몇 가지 문제가 있습니다. 많은 QWidget 기반 클래스 중 일부를 사용하고자 할 때마다 다음과 같은 문제를 먼저 실행합니다.Qt5 QtQuick2에서 QWidget 사용

Qt5의 QGuiApplication 대신 QApplication을 사용해야합니다. 글쎄 그건 easly 변경할 수 있습니다, 맞죠?

이제 QApplication을 사용하고 있지만 QWidget 기반 클래스를 사용할 때마다 프로그램이 중단되거나 일부 말도 안되는 오류 메시지가 표시됩니다.

그러면 Qt5에서 이전 QWidgets을 어떻게 사용해야합니까? 나는 그들이 Qt5와 함께 최상의 솔루션이 아니라는 것을 알고 있지만, 그들은 매우 유용합니다 ...

P.S. 나는 모든 플랫폼에서 Linux로 내 앱을 개발 중이다.
자동 생성 QtQuick2ApplicationViewer 클래스를 사용하여 QtQuick 2.0 기반 응용 프로그램을 렌더링합니다.
그것은이 보인다

답변

4

Qt 5.1에서 (아마도 지금부터) QWidget :: createWindowContainer를 사용해야합니다. 응용 프로그램은 QWidget 기반 응용 프로그램이어야하며 QWidgets 안에 QML을 넣어야합니다. QWidgets를 QML 애플리케이션에 적용하는 것은 지원되지 않습니다.이 blog entry을 참조하십시오.

양식 클래스가 있고 qml을 컨테이너 위젯에 넣으려는 경우.

이 QML있는 경우 : 파일이라고 myqml.qml에서

import QtQuick 2.0 

Rectangle { 
    property alias text: textItem.text 
    width: 156 
    height: 35 
    Text { 
     width: 150 
     height: 20 
     text: qsTr("Hello World") 
     id: textItem 
    } 
} 

을, 다음 리소스 파일의 QML의 접두사에 대한 경로를 넣어.

그런 형태의 생성자에 넣어 :

ui->setupUi(this); // as normal 
QQuickView* view = new QQuickView(); 
QWidget* widget = QWidget::createWindowContainer(view, ui->container); 
view->setSource(QUrl("qrc:/qml/myqml.qml")); 
if(view->status()!=QQuickView::Ready) 
    qDebug("can't initialise view"); 
widget->setMinimumSize(500,100); 
QQuickItem* container = view->rootObject(); 

을 그런 다음 QML과 상호 작용 할 때

container->setProperty("text", "Hello alternate universe"); 
3

알려진 버그 : https://bugreports.qt.io/browse/QTBUG-25643

도 가능한 해결책/해결 방법에 대한 링크를 갖고있는 것 같아요,하지만 난 그들을 확인하지 않았다.

QWidgets 정보 : "최상의 솔루션이 아닙니다."우선 Qt Quick 구성 요소를 갖춘 Qt 5.1 (또는 앞으로 출시 될 버전)까지, 일반 데스크탑에서 유일하게 의미있는 옵션입니다 응용 프로그램 및 유일한 옵션은 정의에 의한 최상의 옵션입니다.)

그러나 향후 QWidgets는 Qt5 앱에 대해 100 % 유효한 선택입니다. 그 (것)들을 가진 단지 것, 다량 발전하게 확률이 낮다, 그래서 당신이 지금있는 무슨은, 당신이 그 (것)들로 이제까지 가지고 있기 위하여려고하고있는 베스트이다. 그래도 괜찮 으면 선택할 솔루션입니다.