2014-04-23 6 views
2

일부 QML 개체를 QGraphcisScene에 추가하려고 시도하지만 장면에 표시하지 않습니다. 여기에 코드가 있습니다. 개의 addWidgetQGraphicsScene에 qml 개체 추가

ListView { 
    width: 100; height: 100 

    model: myModel 
    delegate: Rectangle { 
     height: 25 
     width: 100 
     color: model.modelData.color 
     Text { text: name } 
    } 
} 
+0

QML 파일을 구걸 할 때'import QtQuick 1.0 '을 추가하고 로그 내용을 확인하십시오 (오류보고가 있어야합니다). –

+0

@MarekR qDebug() << component.errors()가 제공합니다. 그리고 myScene-> items(). size()를 검사하면 일부 항목이 추가되었음을 알 수 있습니다. –

+0

@MarekR Btw, QgQuicsScene과 함께 QtQuick2.0을 사용할 수 없습니까? –

답변

3

당신은 사용하여 장면에 QDeclarativeView에 QML을 추가 할 수 있습니다 :

QDeclarativeView view; 
view.setSource(QUrl("qrc:view.qml")); 
view.setStyleSheet("background-color:transparent"); 
QGraphicsProxyWidget * item = myScene->addWidget((QWidget *)view); 

QtQuick 2.0 당신이 QQuickView을 포함 할 수 있습니다

QList<QObject*> dataList; 
dataList.append(new DataObject("Item 1", "red")); 
dataList.append(new DataObject("Item 2", "green")); 


QDeclarativeEngine engine ; 
QDeclarativeContext *context = engine.rootContext(); 
context->setContextProperty("myModel", QVariant::fromValue(dataList)); 
QUrl url("qrc:view.qml") ; 
QDeclarativeComponent component(&engine,url) ; 
QDeclarativeItem *item = qobject_cast <QDeclarativeItem *>(component.create()); 
item->setFlag(QGraphicsItem::ItemHasNoContents, false); 
myScene->addItem(item); 

그리고 여기 내 QML 파일입니다 createWindowContainer을 사용하는 위젯 :

QQuickView *view = new QQuickView(); 
... 

QWidget *container = QWidget::createWindowContainer(view); 
container->setMinimumSize(...); 
container->setMaximumSize(...); 
container->setFocusPolicy(Qt::TabFocus); 
QGraphicsProxyWidget * item = myScene->addWidget((QWidget *)container); 
+0

답변 해 주셔서 감사합니다. 내가 옳다면 이것은 QtQuick 1.0 솔루션입니다. QtQuick 2.0 솔루션이 있습니까? 게다가 QGraphicsView의 주요 부분을 가지고 있기 때문에 QML을 사용하여 인터페이스의 일부를 구현하는 것이 좋습니다. –

+0

예, QtQuick 1.0 용입니다. QtQuick 2.0에 대한 답변을 업데이트했습니다. – Nejat

+0

시도해 보았지만 qgraphicsscene이 포함 된 메인 윈도우 옆에 QML이있는 새 창이 열립니다. –