我已经创建了一个名为OpenGLWidget的定制小部件,我已经在qmlRegisterType函数中注册了它。
嵌套在Qml文件中,我有以下内容:
OpenGLWidget {
id: glwidget
width: parent.width
}我的应用程序死后说width是一个只读属性。
我还尝试将这一行添加到OpenGLWidget头文件中:
Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)(然而,即使没有这些方法,代码仍然编译-为什么?)
无论如何,在我看来,如果您想添加您自己的自定义属性,就会使用Q_PROPERTY,但是像x、y、width、height等属性(它们都是只读的)应该内置,不是吗?
编辑: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发布于 2016-09-08 22:05:50
您的类缺少了Q_OBJECT宏。这导致Qt元对象系统将其视为定义宏的最接近的超类,而忽略了方法重写。
在Q_OBJECT行之前添加Q_PROPERTY行(因此构建系统知道如何为该类运行moc )。然后手动运行qmake (例如。在Qt构建菜单中),因为此更改不会自动获取,因此Makefiles不会自动更新。
使用Qt新类向导将类添加到项目中是个好主意,以避免像这样简单的错误。
https://stackoverflow.com/questions/39400514
复制相似问题