2022.12.12 作业

1、分析Qt工程中的基本程序代码

工程文件Mywnd.pro

#工程文件
QT       += core gui  #所需的类库

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #超过4版本的,需要加widgets

CONFIG += c++17  #支持c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

#工程中的源文件
SOURCES += \
    main.cpp \
    mywnd.cpp

#工程中的头文件
HEADERS += \
    mywnd.h

#工程中的ui文件
FORMS += \
    mywnd.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

头文件Mywnd.h

#ifndef MYWND_H
#define MYWND_H

#include <QWidget>
#include <QPushButton>  //引入头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Mywnd; }  //命名空间的声明
QT_END_NAMESPACE

class Mywnd : public QWidget  //自定义的图形化界面类,公有继承自QWidget类
{
    Q_OBJECT  //信号与槽函数的元,涉及信号与槽函数的操作

signals:
    void change();  //自定义的信号函数,是一个不完整的函数,只有声明没有定义

public slots:
       //void on_change_slot();  //自定义的槽函数,是一个完整的函数,有声明也有定义

public:
    Mywnd(QWidget *parent = nullptr);  //自定义类的构造函数的声明,参数是QWidget类的指针,所依附的父组件
    ~Mywnd();  //自定义类的析构函数的声明

private:
    Ui::Mywnd *ui;  //ui界面的指针,可以通过该指针使用ui界面拖拽出的组件

    QPushButton *btn;  //自定义组件
};
#endif // MYWND_H

源文件Mywnd.cpp

#include "mywnd.h"  //引入工程中的头文件
#include "ui_mywnd.h"  //由ui界面生成的c++头文件

Mywnd::Mywnd(QWidget *parent)  //自定义类的构造函数的定义
    : QWidget(parent)  //调用父类的有参构造函数,完成子类中从父类中继承下来的成员的初始化
    , ui(new Ui::Mywnd)  //给ui指针实例化空间
{
    ui->setupUi(this);  //调用ui指针指向的类的成员函数
    this->btn=new QPushButton(this);  //给自定义组件实例化对象

    ui->pushButton->setText("ui->btn");  //通过ui指针使用ui界面中的组件

    this->btn->setText("this->btn");  //通过this指针使用自定义的组件
}

Mywnd::~Mywnd()  //自定义类的析构函数的定义
{
    delete ui;  //将ui指针所指向的空间手动释放
}

源文件main.cpp

#include "mywnd.h"    //引入工程中的头文件

#include <QApplication>  //引入应用程序的头文件

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);  //实例化一个应用程序对象
    Mywnd w;  //实例化自定义的类
    w.show();  //调用类中的方法
    return a.exec();  //轮询等待
}

2、手动实现Qt中的对象树模型

#include <iostream>
#include <list>

using namespace std;

class Object 
{
    public:
        Object(Object *parent=nullptr){
            if(parent!=nullptr){
                parent->child.push_back(this);
            }
        }
        virtual ~Object(){
            for (auto it = child.begin(); it != child.end();it++){
                delete *it;
            }
        }
    public:
        list<Object *> child;
};

class A : public Object
{
    public:
        A(Object *parent=nullptr){
            if(parent!=nullptr){
                parent->child.push_back(this);
            }
            cout << "A的构造函数" << endl;
        }
        virtual ~A(){
            cout << "A的析构函数" << endl;
        }
};

class B : public Object
{
    public:
        B(Object *parent=nullptr){
            if(parent!=nullptr){
                parent->child.push_back(this);
            }
            cout << "B的构造函数" << endl;
        }
        virtual ~B(){
            cout << "B的析构函数" << endl;
        }
};

int main(int agrc,const char *argv[])
{
    A widget;
    B *btn = new B(&widget);

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值