作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有兴趣通过 C++ QQuickItem 访问 qml 父项的属性。我有一个名为 VisibleTag 的自定义 QQuick 项目,它扩展了 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 的可视父项。在示例中,我希望父级指向矩形 opPic。
我是否误解了 QQuickItem 构造函数的工作原理?是否可以访问 qml 可视化父级?
最佳答案
QML 构造 QQuickItem 不是:
T* o = new T(parent);
但是
T* o = new T;
T->setParentItem(parent);
所以你不能在构造函数中获取父对象,但你必须在 componentComplete()
中获取它方法(类似于 QML 中的 Component.onCompleted
):
#ifndef VISIBLETAG_H
#define VISIBLETAG_H
#include <QQuickItem>
class VisibleTag : public QQuickItem
{
Q_OBJECT
public:
VisibleTag(QQuickItem *parent=nullptr);
protected:
void componentComplete();
private:
bool dummy() { return false; }
};
#endif // VISIBLETAG_H
#include "visibletag.h"
VisibleTag::VisibleTag(QQuickItem *parent):QQuickItem(parent)
{
}
void VisibleTag::componentComplete()
{
if(parentItem())
parentItem()->setVisible(dummy());
}
关于c++ - 构造函数中的 QQuickItem 父项为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60157548/
我是一名优秀的程序员,十分优秀!