[英]Qt/Qml: Custom widget — cannot set “width” property as it is readonly
我創建了一個名為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
您的班級缺少Q_OBJECT
宏。 這導致Qt元對象系統將其視為定義宏的最接近的超類,而缺少您的方法重寫。
在Q_PROPERTY
行之前添加Q_OBJECT
行(這是必需的,以便構建系統知道為此類運行moc )。 然后手動運行qmake (例如,從Qt Creator構建菜單中),因為此更改不會自動獲取,因此Makefile不會自動更新。
最好使用Qt Creator的新類向導將類添加到項目中,以避免類似這樣的簡單錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.