Я заинтересован в доступе к атрибутам родительского элемента qml через c ++ QQuickItem. У меня есть пользовательский элемент QQuick под названием VisibleTag и расширяет QQuickItem. Любой элемент qml, содержащий этот тег объекта, я хотел бы установить как видимый или невидимый на основе других факторов, которые я установил в своем коде, которые я временно удалил для целей этого вопроса. Тем не менее, у меня возникла проблема, когда мой родительский указатель является нулевым в конструкции.
//main.cpp
#include <QtQuick/QQuickView>
#include <QGuiApplication>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<VisibleTag>("VisibleTag", 1, 0, "VisibleTag");
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///app.qml"));
view.show();
return app.exec();
}
//app.aml
Rectangle{
id: opPic
height: 100
width: 100
color: "red"
VisibleTag{}
}
//header
class VisibleTag : public QQuickItem
{
Q_OBJECT
public:
VisibleTag( QQuickItem* parent = nullptr );
private:
bool isVisible() { return false; } //this is a dummy function for testing my issue
}
//cpp
VisibleTag::VisibleTag( QQuickItem* parent )
: QQuickItem( parent )
{
//qDebug() << parent->objectName(); //This line will break because parent is null
parent->setVisible( isVisible() );
}
Вместо этого я ожидал бы иметь родительский указатель, указывающий на визуальный родительский элемент qml. В этом примере я ожидал бы, что parent указывает на Rectangle opPi c.
Не понимаю ли я, как работает конструктор QQuickItem? Возможно ли получить доступ к родительскому элементу qml?