gpt4 book ai didi

c++ - 将 qml 对象添加到 QGraphicsScene

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:40 25 4
gpt4 key购买 nike

我尝试向我的 QGraphcisScene 添加一些 QML 对象,但它们没有显示在场景中。这是代码。

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 文件:

ListView {
width: 100; height: 100

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

最佳答案

您可以使用 addWidget 将 QDeclarativeView 中的 QML 添加到场景中:

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

对于 QtQuick 2.0,您可以使用 createWindowContainerQQuickView 嵌入到小部件中:

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

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

关于c++ - 将 qml 对象添加到 QGraphicsScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23245761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com