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日

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面