Qt を学んで以来、私が読んだドキュメンテーションや本では、ウィジェットなどの QObject サブクラスのインスタンスである属性にポインターを使用しているという事実に混乱しています。
QObjects が子を削除することは知っていますが、本当に必要な場合を除いてポインターの使用を避けるべきではありませんか?
これは、ポインターを使用しない実際の例です。
Widget.h ファイル:
#include <QSlider>
#include <QLabel>
#include <QVBoxLayout>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
public slots:
void change(int);
private:
QSlider m_slider;
QLabel m_label;
QVBoxLayout m_layout;
};
および Widget.cpp ファイル:
#include "Widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, m_slider(Qt::Horizontal)
, m_label("0")
, m_layout(this)
{
m_layout.addWidget(&m_slider);
m_layout.addWidget(&m_label);
connect(&m_slider, SIGNAL(valueChanged(int)), this, SLOT(change(int)));
}
void Widget::change(int n){
m_label.setText(QString::number(n));
}
ここでの唯一の違いは、ヘッダーを Widget.h ファイルに含める必要があることです。それがポインターを使用する理由でしょうか?
また、StackOverflow で同様の質問を見たことがあることを付け加えたいと思いますが、その答えは、ウィジェットは関数呼び出しの間に存在する必要があるというものでしたが、ウィジェットを属性として使用すると、ここで達成されます。