在主程序中不停的添加代码是不可行的,这是由于当一个界面中有一百个按钮时,就要在主程序中创建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