因此,我可以通過C++代碼更改某個QML對象的屬性,但我無法在屏幕上看到結果。 我有一個項目重複64次,我想要顯示一個特定的圖像只爲第32項(從C + +),所以我用invokeMethod通過C++訪問對象,然後我用setProperty來更改可見性,如果我查看它與qDebug屬性「可見」確實發生了變化,但我注意到在屏幕上沒有任何區別我仍然無法看到圖像,但是如果我從qml更改可見性,我可以看到它。QML對象屬性從C++更改,但我看不到結果
這是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"
}
}
}
}
}
請縮進如果正常,你想讓別人看你的代碼在它 - 謝謝! –
太糟糕了,沒有什麼可以縮進的C++代碼 –
我說的是QML。 C++看起來不錯。 –