Как привести элементы QML к соответствующему элементу C ++ в Qt Quick

Мой вопрос лучше всего пояснить на примере. У меня есть 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

1

Решение

Q: но я после времени компиляции проверяю, что предлагает кастинг.

qobject_cast не предлагает никакой проверки во время компиляции. Это все время выполнения и динамично, поэтому этот запрос не правдоподобен. Свойство context нормально, или вы можете также получить имя класса с помощью QMetaObject. Тогда вы могли бы построить статическое LUT, но в целом это может не стоить того …

1

Другие решения


По вопросам рекламы [email protected]