QGridLayoutにテキストを含むQLabelを表示するクラスがあります。 QLabelがクラスメンバである場合はすべて正常ですが、そうでない場合はグリッドに表示されません。QLabelはメンバーでない場合は表示されません
QLabelはメンバーではなく、コンストラクタで作成されます。なぜそれがそうである
class Account : public QWidget
{
private:
QLabel lab;
QGridLayout * grid;
public:
Account(QWidget * parent=0);
public slots:
void spend(int);
void update();
};
た.cpp
#include <QLabel>
#include <QLineEdit>
#include <QTextStream>
#include <QFileInfo>
#include <vector>
#include <QGridLayout>
#include <iostream>
Account::Account(QWidget * parent) : QWidget(parent)
{
grid=new QGridLayout(this);
lab.setText("RFD");
grid->addWidget(&lab,0,0); //is displayed
}
:
class Account : public QWidget
{
private:
//QLabel lab;
QGridLayout * grid;
public:
Account(QWidget * parent=0);
public slots:
void spend(int);
void update();
};
た.cpp
#include <QLabel>
#include <QLineEdit>
#include <QTextStream>
#include <QFileInfo>
#include <vector>
#include <QGridLayout>
#include <iostream>
Account::Account(QWidget * parent) : QWidget(parent)
{
grid=new QGridLayout(this);
QLabel lab;
lab.setText("RFD");
grid->addWidget(&lab,0,0); //is not displayed
}
QLabelはメンバーですか?
スタック上にlabを作成すると、ブロックの最後(つまりctorの最後)ですぐに破棄されます。ヒープ上に作成し、メンバーにする必要があります –