gpt4 book ai didi

c++ - 如果不是成员(member),则不显示 QLabel

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:12 25 4
gpt4 key购买 nike

我有一个类在 QGridLayout 中显示带有一些文本的 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);
QLabel lab;
lab.setText("RFD");
grid->addWidget(&lab,0,0); //is not displayed
}

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
}

为什么会这样?

最佳答案

因为当您在构造函数中声明 QLabel 时,它只是一个局部变量,因此它在函数末尾超出了范围(请参阅下面我的评论):

{
grid=new QGridLayout(this);
QLabel lab; // created here
lab.setText("RFD");
grid->addWidget(&lab,0,0); //is not displayed
} // destroyed here as the variable is out of scope

注意

如果你想在你的构造函数中创建它然后使它成为一个指针并新建它——你仍然需要跟踪这个指针,或者作为一个成员变量或者将指针传递给其他函数/类来照顾它的......(即当你完成它时删除它......

进一步 - addWidget() 接受一个指针,因此它可能会处理它本身的销毁 - 所以你可能会这样做:

{
grid=new QGridLayout(this);
QLabel *pLab = new QLabel(this);
lab.setText("RFD");
grid->addWidget(pLab,0,0); //is not displayed
}

关于c++ - 如果不是成员(member),则不显示 QLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37908501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com