• 4067阅读
  • 1回复

地址簿中类的作用域问题 [复制链接]

上一主题 下一主题
离线yuanlulu
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-23
/**********addressbook.h**************************/
class AddressBook : public QWidget
{
Q_OBJECT

public:
AddressBook(QWidget *parent = 0);

private:
QLineEdit *nameLine;
QTextEdit *addressText;
};
/***************end*********************************/

/*************addressbook.cpp********************/
AddressBook::AddressBook(QWidget *parent)
: QWidget(parent)
{
QLabel *nameLabel = new QLabel(tr("Name:"));
nameLine = new QLineEdit;

QLabel *addressLabel = new QLabel(tr("Address:"));
addressText = new QTextEdit;
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(nameLabel, 0, 0);
mainLayout->addWidget(nameLine, 0, 1);
mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
mainLayout->addWidget(addressText, 1, 1);
setLayout(mainLayout);
setWindowTitle(tr("Simple Address Book"));
}

我才学c++和Qt都不太久。这段是抄的例程,对于nameLabeladdressLabel,mainLayout 为什么是局部的不太理解。
因为出了构造函数不就出了它们的作用域了吗?为什么在主函数中可以显示它们而没出错呢?

还有就是为什么各个成员都设计成指针然后开辟内存,直接在类内部声明类成员不行吗?例程这么做有什么好处?
离线lugaideath

只看该作者 1楼 发表于: 2009-11-23
因为是指针,内存中还是存在,过了构造函数都没有被释放

如果你不采用指针,那么构造函数结束,那么你的控件都会被释放,什么都没有显示的。

而你的指针会在窗体的析构的时候被释放
快速回复
限100 字节
 
上一个 下一个