QT_仅仅直接在构造函数中创建对象的不可行的原因

#include "mainwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget w;//执行QApplication的构造函数,所以为了减少主函数的代码量,将其他的子窗口放在其构造函数即可(就会自动的执行)
    w.show();

    return a.exec();
}

 在主程序中不停的添加代码是不可行的,这是由于当一个界面中有一百个按钮时,就要在主程序中创建100个对象,这样的代码可读性不高,太难看了。

由以上的注释内容可以得知,程序在执行时,会自动先执行构造函数, 不如将界面中的控件放在构造函数中,这样就可以减少主程序代码的数量,

#include "mainwidget.h"

#include <QPushButton>
MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{

    QPushButton btn1;
    QPushButton btn2;
    
    btn1.setParent(this);
    btn1.setText("1111");
    btn1.move(100,100);


    btn2.setParent(this);
    btn2.setText("22222");

}

MainWidget::~MainWidget()
{

}

 如果仅仅是在构造函数中创建了如上面的代码的时候,当运行的时候会发现,界面中并没有控件的显示,这是因为仅仅在此构造函数中创建了对象以及他的属性,相当于创建了一个临时变量,当构造函数执行结束的时候,便会释放,等于没有创建。此时需要在构造函数的头文件中添加如下所示的代码,将其转化为全局变量;

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>

#include <QPushButton>


class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

private:
    QPushButton btn1;
    QPushButton btn2;
};

#endif // MAINWIDGET_H

或者使用构造函数传参的方式(利用指针)

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>

#include <QPushButton>


class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

private:
    QPushButton btn1;
    QPushButton *btn2;
};

#endif // MAINWIDGET_H

 

添加头文件QPushButton,在文件中添加了

    QPushButton btn1;
    QPushButton btn2;

所以在构造函数中就没必要创建对象。只需要拿来使用即可;
#include "mainwidget.h"

#include <QPushButton>
MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{

//    QPushButton btn1;
//    QPushButton btn2;
    
    btn1.setParent(this);
    btn1.setText("1111");
    btn1.move(100,100);


    btn2.setParent(this);
    btn2.setText("22222");

}

MainWidget::~MainWidget()
{

}

 或者利用构造函数传参的方式

#include "mainwidget.h"

#include <QPushButton>
MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{

//    QPushButton btn1;
//    QPushButton btn2;

    btn1.setParent(this);
    btn1.setText("1111");
    btn1.move(100,100);


    btn2 = new QPushButton(this);//指针没有空间,是需要动态的对其进行空间的分配
    btn2 ->setParent(this);
    btn2 ->setText("22222");

}

MainWidget::~MainWidget()
{

}

 

综上所述:在创建对象的时候,一定要在头文件中声明,保证创建的是全局变量。防止知识创建了局部的变量;导致程序运行出现不了想要的结果。

 
 

  

转载于:https://www.cnblogs.com/doker/p/11023265.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值