QT中的Qwidget类的构造及显示区别

示例代码:
1、头文件

class MainWindow : public QMainWindow
{
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

2、实现文件
代码1

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
   QLabel label=new QLabel(this);
   label.setGeometry(10,10,100,20);
   QDateTime *datetime=new QDateTime(QDateTime::currentDateTime());
   label.setText(datetime->date().toString());
}

这个是可以正常显示的,在mainwindow中有个label标签显示时间。
但是我将上述实现代码改为:
代码2

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
   QLabel label;
   label.setParent(this);
   label->setGeometry(10,10,100,20);
   QDateTime *datetime=new QDateTime(QDateTime::currentDateTime());
   label->setText(datetime->date().toString());
     }

之后就不能显示label标签,这是为什么?
我在mainwindow的声明中添加一个label成员,对这个成员使用代码2同样可以显示,这又是为什么?

首先你代码1、代码2都编译不过,可能你拷贝的时候搞混了;我修改了
代码1:

    QLabel *label=new QLabel(this);
    label->setGeometry(10,10,100,20);
    QDateTime *datetime=new QDateTime(QDateTime::currentDateTime());
    label->setText(datetime->date().toString());

代码2:

        QLabel label;
    label.setParent(this);
    label.setGeometry(10,10,100,20);
    QDateTime *datetime=new QDateTime(QDateTime::currentDateTime());
    label.setText(datetime->date().toString());

回到你的问题,为什么会出现你描述的情况:
1.你的控件定义成指针或者全局变量都可以显示,因为它的内存在堆里;
2.而代码2,label定义成局部变量(栈内存的变量),构造函数执行完了,也就是label生命结束的的时候,
所以还没显示出来就没了,你看不到想现象了