Мой вопрос лучше всего пояснить на примере. У меня есть QML с Text{}
вещь. В C ++ я могу добраться до этого пункта, и у меня нет проблем с использованием qobject_cast
превратить что-либо в QQuickItem*
, Но как мне превратить его в ближайший соответствующий элемент, чтобы я мог вызывать более конкретные методы, такие как setText()
так же, как я мог бы назвать setWidth()
? Я понимаю, что могу использовать универсальный метод setProperty (), но я после времени компиляции проверяю, что предлагает кастинг.
Мне нужен более общий ответ для нахождения соответствия между QML и их классами C ++, чтобы я мог узнать, как это сделать для прямоугольников, MenuBars и т. Д. Я не могу найти это в документах. Для тех, кто предпочитает примеры кода:
auto text_object = app_item->findChild<QObject*>("myTextArea");
text_object->setProperty("text","New Text set from Code"); //THIS WORKS BUT...
auto text_qitem = qobject_cast<QQuickItem*>(text_object);
text_qitem->setWidth(128);
auto text_quick_text = qobject_cast<WHATGOESHERE???*>(text_object);
text_quick_text->setText("new Text for qml item"); //I WANT TO DO THIS
Q: но я после времени компиляции проверяю, что предлагает кастинг.
qobject_cast не предлагает никакой проверки во время компиляции. Это все время выполнения и динамично, поэтому этот запрос не правдоподобен. Свойство context нормально, или вы можете также получить имя класса с помощью QMetaObject. Тогда вы могли бы построить статическое LUT, но в целом это может не стоить того …