gpt4 book ai didi

c++ - QML 对象属性从 C++ 更改,但我看不到结果

转载 作者:行者123 更新时间:2023-11-30 05:27:43 28 4
gpt4 key购买 nike

所以我可以通过 C++ 代码更改某个 QML 对象的属性,但我无法在屏幕上看到结果。我有一个项目重复了 64 次,我希望只为第 32 个项目(来自 C++)显示某个图像,所以我使用 invokeMethod 通过 C++ 访问该对象,然后我使用 setProperty 更改可见性,如果我查看它qDebug 属性“visible”确实改变了,但我注意到屏幕上没有区别我仍然看不到图像,但是如果我从 qml 改变可见性,我可以看到它。

这是C++代码:

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view;
view.setSource(QUrl("qrc:///main.qml"));
view.show();
QQuickItem* child;
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///Board.qml")));
QObject *rootObject = engine.rootObjects().first();
QQuickItem *qmlObject = rootObject->findChild<QQuickItem*>("grid")->findChild<QQuickItem*>("repeter");
QMetaObject::invokeMethod(qmlObject,"itemAt",Qt::DirectConnection, Q_RETURN_ARG (QQuickItem*,child), Q_ARG(int,32));
child=child->findChild<QQuickItem*>("pleaseWork");
qDebug() << child->property("visible");
child->setProperty("visible","true");
qDebug() << child->property("visible");
return app.exec();
}

我使用 qDebug 验证属性更改

这是 QML 代码:

Item 
{
id: root
width: 8*45
height: 8*45
Grid
{
id: grid
objectName: "grid"
rows: 8
Repeater
{
objectName: "repeter"
model: 64
Image
{
objectName: "test"
width: 45; height: 45
source: "images/dark_square.png"
Image
{
id: isit
objectName: "pleaseWork"
visible: false
source: "images/avail_dark.png"
}
}
}
}
}

最佳答案

QQuickViewQQmlApplicationEngine 是加载和显示 QML View 的替代方法。您加载到 QQmlApplicationEngine 中的内容与 QQuickView 的可见输出无关。

为了让事情运行起来,您需要将 QML 文件的顶部元素从 Item 更改为 Window 并将其显示在屏幕上:

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///Board.qml")));
// end of your code

QObject *rootObject = engine.rootObjects().first();
QQuickWindow *window = qobject_cast<QQuickWindow *>(rootObject);
if (!window) {
qDebug() << "Error: Your root item has to be a window.";
return -1;
}
window->show();

// continue with your code
QQuickItem *qmlObject = rootObject->findChild<QQuickItem*>("grid")->findChild<QQuickItem*>("repeter");

关于c++ - QML 对象属性从 C++ 更改,但我看不到结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117876/

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