C++コードで特定のQMLオブジェクトのプロパティを変更できましたが、結果が画面に表示されませんでした。 私は項目を64回繰り返したので、C++から32番目の項目(C++から)のみを表示したいので、invokeMethodを使用してC++でオブジェクトにアクセスし、setPropertyを使用して可視性を変更しましたqDebugプロパティで "visible"が変更されましたが、画面に違いはないことがわかりましたが、まだ画像は表示されませんが、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();
}
Iプロパティを検証するために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++はよく見えます。 –