zzllvlv
2019-08-29 17:47
采纳率: 100%
浏览 572

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条回答 默认 最新

  • qtchen_1988 2019-08-29 18:01
    已采纳

    首先你代码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生命结束的的时候,
    所以还没显示出来就没了,你看不到想现象了

    打赏 评论

相关推荐 更多相似问题