Qt学习笔记1
一个标准的QWidgets Application包含四个文件:
1.mian.cpp是程序代码,其中的中QApplication a对象表示该应用程序,每个程序中有且只有一个.
show()方法对于QObject类的对象以顶层方式显示
a.exec()是进入消息循环,把程序的控制权交给Qt
2.mainwindow.h是窗口的头文件,保存类其中:
Q_OBJECT
宏是使得从QObject
及其派生类可以使用Qt的signal/slot机制,以及Qt的meta-object系统
3.mainwindow.cpp是窗口的cpp文件定义了窗口的一些函数其中:
QObjec
及其派生类的构造函数里都有一个parent
参数,Qt使用parent
来构建一个树结构进行内存管理,当parent
被删除时,已parent为根节点的子树都会被释放内存。
4.main.pro文件类似于.sln文件
学会使用Qt的帮助文档,比如我们向窗体中添加一个最常见的按钮控件,他是QPushButton在帮助索引中搜索:
其中给出了其所在头文件和继承关系,和所在的qmake模块(qmake是Qt的工具包)
后面还有他包含的字段,方法,还有使用示例比如:
QPushButton(const QString &text, QWidget *parent = nullptr)//其文本显示内容
QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)//向按钮中插入一个图片
move(int x,int y)//移动按钮的位置
在移动时一般以左上角定义为(0,0)点
对于桌面程序程序下面的方法是常用
1 setWindowsTitle(tr("text"));//其中tr()函数可以解决中文显示问题 2 serFixedSize(int w,int h);//指定窗口大小后不可更改 3 resize(int width,int high)//定义窗体的大小
现在我们了解一下控件的析构方式,之前我们说过每一个控件都依附于一个父控件(除了mainwindow),当一个父控件被析构时他的子控件也会被析构,我们利用pushbutton来验证一下
创建一个mypushbutton类放入test1项目中,修改mypushbutton.h如下
#ifndef MYPUSHBUTTOPM_H #define MYPUSHBUTTOPM_H #include <QPushButton> class myPushButtopm : public QPushButton//修改其继承自QPushButton { Q_OBJECT public: explicit myPushButtopm(QWidget *parent = nullptr); ~myPushButtopm(); signals: public slots: }; #endif // MYPUSHBUTTOPM_H
在mybushbutton.cpp修改为
#include "mypushbuttopm.h" #include <QDebug> myPushButtopm::myPushButtopm(QWidget *parent) : QPushButton(parent)//其调用父类构造函数故使用父类初始化函数进行构造函数 { qDebug()<<"创建";//在控制台输出字符 } myPushButtopm::~myPushButtopm(){ qDebug()<<"删除"; }
修改主窗口的析构函数
MainWindow::~MainWindow() { qDebug()<<"析构"; }
最后结果
创建 析构 删除
虽然打印顺序是先析构再删除但是实际上执行完主窗口的析构函数之后在析构其子类直到析构到没有子类的子类再完全释放他,因此Qt在一定程度上简化了内存释放的操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构