qmlRegisterType
関数で登録したOpenGLWidget
というカスタムウィジェットを作成しました。 QMLファイルの中にネストQt/Qml:カスタムウィジェット - 読み込み時に「幅」プロパティを設定できません
は、私はこれを持っている:
OpenGLWidget {
id: glwidget
width: parent.width
}
私のアプリはwidth
が読み取り専用プロパティであることを言って死にます。
私はまたOpenGLWidget
ヘッダファイルに次の行を追加しようとしている:
Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
(これらのメソッドが存在しない場合でも、しかし、コードはまだコンパイルする - なぜ?)
をとにかく、あなた自身のカスタムプロパティを追加したい場合、x
、y
、width
、height
などのプロパティ(すべて読み取り専用)は組み込まれている必要がありますか?いいえ、Q_PROPERTY
が使用されていますか?
EDIT: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
少なくともOpenGLWidgetクラス定義のソースコード(.hファイル)が必要です(多くの場合、無関係なプライベートメンバーが削除されている可能性があります)。 – hyde
@hyde修正済み、私の編集を参照してください。 – Tobias