У меня есть следующий QML Rectangle
, у которого есть родительский элемент. Самое важное, что следует отметить, это то, что он применяет элемент Translate QML который я изо всех сил пытаюсь понять, что именно он делает с элементом QML и его дочерними элементами, к которым он применяется.
Код:
Window {
id: main_window
width: 640
height: 480
visible: true
Item {
id: rect_parent
objectName: "rect_parent_object"
x: 0
y: 0
width: parent.width
height: parent.height
transform: Translate {x: -20; y: -30}
Rectangle {
id: rect
objectName: "rect_object"
x: parent.width/2
y: parent.height/2
width: parent.width/3
height: parent.height/3
color: "red"
}
}
}
rect_parent
имеет свойство transform: Translate
, как вы видите в приведенном выше коде. Ниже приведен перевод X Y, который применяется к нему.
transform: Translate {x: -20; y: -20}
В части C++ моего кода в main.cpp
я получаю QQuickItem
следующим образом.
QQuickItem *rectQuickItem = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("rectObject");
QQuickItem *rectQuickItemParent = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("rectParentObject");
Да, я могу получить x
и y
из rectQuickItem
следующим образом.
QQuickItem *rectQuickItemParent = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("rectParentObject");
qreal item_x = rectQuickItem->x();
qreal item_y = rectQuickItem->y();
Вопрос:
Но как мне получить переведенные x и y rectQuickItem
?
Я обнаружил, что item_x
и item_y
не являются x и y, которые на самом деле применяются в пользовательском интерфейсе. Кажется, что transform: Translate
добавляет некоторые единицы к x и y из rect
, чего я не получаю, когда запрашиваю rectQuickItem->x()
.
Проще говоря, мне нужно, чтобы -20
и -30
применялись к x и y в transform: Translate
блоке rect_parent
, который в конечном итоге применяется к rect
Цель:
я изменяю родителя элемента rectQuickItem
, чтобы отобразить его в другом окне с теми же координатами x и y, что и у исходного родителя. Мне нужны единицы, которые были добавлены к x
и y
свойств rectQuickItem
из-за того, что transform: Translate
было установлено так, чтобы отображать rect
визуально в том же месте, что и предыдущий родитель.
Дополнительный вопрос:
будет ли QQuickItem::MapToItem помочь мне здесь?
rect_parent
. В этой заметке, есть ли способ получить координаты относительно окна (main_window
), то есть? - person TheWaterProgrammer   schedule 28.02.2018rect_parent
является прямым родителемrect
. Если вы увидите пример кода, вы поймете, что я имею в виду. Я имею в виду QQuickItems по их идентификаторам в QML. - person TheWaterProgrammer   schedule 28.02.2018transform: Translate
, очень базовые. следовательно, мой вопрос тоже может быть отбит :-) - person TheWaterProgrammer   schedule 28.02.2018QQuickItem
, отображаемые на экране, должны визуально отображаться за пределами экрана с теми же координатами, что и на экране. То, как я это делаю сейчас, заключается в том, что я создаю базуQQuickItem
на стороне C++, которая имеет те же размеры, что и экранное окно. Затем я выбираюQQuickItem
s на экране, которые должны быть отображены за пределами экрана, и устанавливаю их родителя как окно за пределами экрана, а затем вызываю обновление в окне за пределами экрана. Это, безусловно, требует обработки C++. Следовательно, необходимо иметь дело с элементами QML на стороне C++. - person TheWaterProgrammer   schedule 28.02.2018QQuickItem
на элемент QML, не обязательно имея дело с именем объекта. Я думаю, что я должен поднять отдельный вопрос по этому поводу для всеобщего блага. - person TheWaterProgrammer   schedule 28.02.2018