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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 8月13日

悬赏问题

  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置