我创建了一个名为qmlRegisterType
的自定义窗口小部件,我已在OpenGLWidget {
id: glwidget
width: parent.width
}
函数中注册。
嵌套在Qml文件中,我有这个:
width
我的应用程序死了,说OpenGLWidget
是一个只读属性。
我也尝试将此行添加到Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
标题文件中:
Q_PROPERTY
(但是,即使这些方法不存在,代码仍会编译 - 为什么?)
无论如何,在我看来,如果您想要添加自己的自定义属性,我会使用x
,但y
,width
,height
,{{ 1}}等等(都是readonly)应该是内置的,不是吗?
根据请求编辑OpenGLWidget
头文件。
#ifndef OPENGLWIDGET_H
#define OPENGLWIDGET_H
#include <QObject>
#include <QGLWidget>
class OpenGLWidget : public QGLWidget
{
Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
public:
OpenGLWidget();
void setWidth(int width) { resizeGL(width, this->geometry().height()); }
void widthChanged(int width) { }
protected:
void initializeGL();
void paintGL();
void resizeGL(int width, int height);
};
#endif // OPENGLWIDGET_H
答案 0 :(得分:1)
您的班级缺少Q_OBJECT
宏。这会导致Qt元对象系统将其视为最接近定义宏的超类,缺少方法覆盖。
在Q_OBJECT
行之前添加Q_PROPERTY
行(需要它以便构建系统知道为此类运行 moc )。然后手动运行 qmake (例如,从Qt Creator构建菜单中),因为此更改不会自动获取,因此Makefile不会自动更新。
最好使用Qt Creator新类向导将类添加到项目中,以避免出现类似的错误。