概述
工程文件
QT += core gui
#添加类库默认gui,如果需要添加其他类库在后面补上
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#添加widgets类库,在qt4.0以后的版本需要添加,之前的版本默认在gui类库中
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
#警告
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
#源文件
SOURCES +=
main.cpp
widget.cpp
#头文件
HEADERS +=
widget.h
#图形化界面文件
FORMS +=
widget.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QToolButton>//根据自己需要添加所需要组件的头文件
//引入头文件
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }//对Ui命名空间已定义的Widget声明
QT_END_NAMESPACE
class Widget : public QWidget //自己定义的Widget图形化类,公有继承已经定义好的QWidget模板类
{
Q_OBJECT//信号与槽对应的元
public:
Widget(QWidget *parent = nullptr);//构造函数声明,参数为父组件的指针
~Widget();//析构函数声明,函数体在源文件中;
private:
Ui::Widget *ui;//通过ui这个指针,对ui可视界面拖拽的组件操作
QToolButton *btn1;//自定义组件
};
#endif // WIDGET_H
源文件
#include "widget.h"
#include "ui_widget.h"
//自定类的构造函数函数体
Widget::Widget(QWidget *parent) //自定义组件的定义
: QWidget(parent) //Widget继承QWiget,这里是用父类的有参构造初始化成员
, ui(new Ui::Widget) //ui指针实例化空间
{
ui->setupUi(this); //调用ui类里面的成员函数
this->btn1=new QToolButton(this); //自定义组件实例化空间
this->btn1->setText("按钮1");//用指向自定义组件的this指针更改自定义组件内容
ui->btn2->setText("按钮2");//更改ui界面上的组件,使用ui指针
}
Widget::~Widget()
{
delete ui;//将ui指针空间释放
}
主函数
#include "widget.h" //引入工程中的头文件
#include <QApplication> //引入应用程序的头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //实例化一个应用程序类对象
Widget w; //在栈区,实例化对象
w.show(); //调用展示函数
return a.exec(); //轮询等待处理
}
对象树模型
#include <iostream>
#include <list>//引入链表模板的头文件
using namespace std;
class Myobject
{
public:
//创建子组件链表
list<Myobject *> child;
Myobject(Myobject * parent=nullptr)//构造函数,当没给定父组件时,让参数指向空
{
if(parent!=nullptr)
{
//将自己的地址尾插到父组件储存子组件地址的链表中
parent->child.push_back(this);
}
cout<<"fu构造函数"<<endl;
}
virtual ~Myobject()//父类为虚构函数,子类的析构函数也为虚析构
{
for(auto p=child.begin();p!=child.end();p++)//从链表开头到结尾释放当前组件的子组件空间
{
delete *p;
cout<<"fu析构函数"<<endl;
}
}
};
//派生类
class A:public Myobject
{
public:
A(Myobject *parent=nullptr)
{
if(parent!=nullptr)
{
parent->child.push_back(this);
}
cout<<"A::构造函数"<<endl;
}
virtual ~A()
{
cout<<"A::析构函数"<<endl;
}
};
class B:public Myobject
{
public:
B(Myobject *parent=nullptr)
{
if(parent!=nullptr)
{
parent->child.push_back(this);
}
cout<<"B::构造函数"<<endl;
}
virtual ~B()
{
cout<<"B::析构函数"<<endl;
}
};
int main()
{
A w;
B *btn=new B(&w);
// B *btn=new B;
// delete btn;
return 0;
}
最后
以上就是俊逸犀牛为你收集整理的将QT项目中,每个文件的每行代码,自行注释一遍,重新手动实现对象树模型的全部内容,希望文章能够帮你解决将QT项目中,每个文件的每行代码,自行注释一遍,重新手动实现对象树模型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复