クラスを作成し、このクラスを別のクラス(両方ともレイアウト)に追加したいのですが、表示される唯一のエラーメッセージは、プログラムがクラッシュしたことです。
明らかなロジックの欠陥があるように感じますが、それは見つかりません。両方を別々に表示できますが、一方を他方に追加しようとすると、プログラムがクラッシュします。コードは次のとおりです。
Mesure.h:
class Mesure : public QWidget
{
public:
Mesure(QString angle);
private:
QToolButton *m_buttonClose;
QHBoxLayout *m_hlayoutMesure;
QCheckBox *m_checkboxMesure;
QLabel *m_labelAngle;
};
Mesure.cpp:
Mesure::Mesure(QString angle) : QWidget()
{
QHBoxLayout *m_hlayoutMesure = new QHBoxLayout;
QCheckBox *m_checkboxMesure = new QCheckBox(this);
QToolButton *m_buttonClose = new QToolButton(this);
QLabel *m_labelAngle = new QLabel(angle, this);
m_buttonClose->setText("X");
m_hlayoutMesure->addWidget(m_checkboxMesure);
m_hlayoutMesure->addWidget(m_labelAngle);
m_hlayoutMesure->addWidget(m_buttonClose);
setLayout(m_hlayoutMesure);
}
PanneauMesure.h:
class PanneauMesure : public QWidget
{
public:
PanneauMesure();
void add(Mesure *mesure);
private:
QVBoxLayout *m_vlayoutMesures;
};
PanneauMesure.cpp:
PanneauMesure::PanneauMesure() : QWidget()
{
QVBoxLayout *m_vlayoutMesures = new QVBoxLayout;
setLayout(m_vlayoutMesures);
}
void PanneauMesure::add(Mesure *mesure)
{
m_vlayoutMesures->addWidget(mesure);
setLayout(m_vlayoutMesures);
}
main.cpp:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
PanneauMesure panneau;
Mesure mesure("14°");
panneau.add(&mesure);
return app.exec();
}
編集:問題は解決しました。次のようにファイルを変更する必要がありました。
Mesure.cpp:
Mesure::Mesure(QString angle) : QWidget(),
m_hlayoutMesure(new QHBoxLayout(this)),
m_checkboxMesure(new QCheckBox(this)),
m_buttonClose(new QToolButton(this)),
m_labelAngle(new QLabel(angle, this))
{
m_buttonClose->setText("X");
m_hlayoutMesure->addWidget(m_checkboxMesure);
m_hlayoutMesure->addWidget(m_labelAngle);
m_hlayoutMesure->addWidget(m_buttonClose);
setLayout(m_hlayoutMesure);
}
PanneauMesure.cpp:
PanneauMesure::PanneauMesure() : QWidget(),
m_vlayoutMesures( new QVBoxLayout(this))
{
setLayout(m_vlayoutMesures);
}
void PanneauMesure::add(Mesure *mesure)
{
m_vlayoutMesures->addWidget(mesure);
setLayout(m_vlayoutMesures);
}