So konnte ich die Eigenschaft eines bestimmten QML-Objekts über C++ - Code ändern, aber ich konnte das Ergebnis auf dem Bildschirm nicht sehen. Ich habe ein Element 64 Mal wiederholt, und ich möchte ein bestimmtes Bild nur für das 32. Element (aus C++) angezeigt werden, so habe ich InvokeMethod verwendet, um das Objekt über C++ zugreifen, dann habe ich setProperty verwendet, um die Sichtbarkeit zu ändern, wenn ich es anzeigen mit qDebug hat sich die Eigenschaft "visible" geändert, aber ich merke keinen Unterschied auf dem Bildschirm Ich kann das Bild immer noch nicht sehen, aber wenn ich die Sichtbarkeit von qml ändere, kann ich es sehen.QML-Objekt-Eigenschaft geändert von C++, aber ich kann das Ergebnis nicht sehen
Dies ist der C++ Code:
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();
}
I qDebug verwendet die Eigenschaft
geändertDies ist der QML-Code zu überprüfen:
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"
}
}
}
}
}
Bitte einrücken Ihren Code richtig, wenn Sie andere Leute wollen aussehen daran - danke! –
Schade, dass es im C++ Code keine Einrückung gibt –
Ich spreche von der QML. C++ sieht gut aus. –