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()
{

}

 

綜上所述:在創建對象的時候,一定要在頭文件中聲明,保證創建的是全局變量。防止知識創建了局部的變量;導致程序運行出現不了想要的結果。

 
        

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM