QT学习和代码练习
-
-
#include "mywidget.h" // 包含自定义窗口类MyWidget的头文件// MyWidget类的构造函数,parent为父窗口指针 MyWidget::MyWidget(QWidget *parent): QWidget(parent) // 初始化父类QWidget {this->setWindowTitle("QQ"); // 设置窗口标题为"QQ"// 设置窗口图标,图标路径为"D:\\Game\\icon\\qq.svg"this->setWindowIcon(QIcon("D:\\Game\\icon\\qq.svg"));this->setStyleSheet("background:white;"); // 设置窗口背景色为白色this->setFixedSize(QSize(1000,618)); // 设置窗口固定大小为1000x618像素// 获取屏幕的几何信息(尺寸和位置)QRect screen = QGuiApplication::primaryScreen()->geometry();// 将窗口移动到屏幕中央(计算方式:(屏幕宽度-窗口宽度)/2 为水平居中位置,垂直方向同理)this->move((screen.width()-this->width())/2, (screen.height()-this->height())/2);// 创建QMovie对象,加载GIF动画文件(路径为"D:\\Game\\GIf\\20251015195257.gif")QMovie *mv = new QMovie("D:\\Game\\GIf\\20251015195257.gif");// 创建标签lab1,作为GIF的显示容器,父窗口为当前窗口QLabel *lab1 = new QLabel("图片",this);lab1->setMovie(mv); // 为标签设置要显示的GIF动画mv->start(); // 开始播放GIF动画lab1->setScaledContents(true); // 设置标签内容(GIF)可缩放以适应标签大小lab1->resize(this->width(), this->height()/2); // 设置标签大小:宽度与窗口相同,高度为窗口的一半// 创建账号输入框edit1,父窗口为当前窗口QLineEdit *edit1 = new QLineEdit(this);edit1->setFixedSize(this->width()*0.3,this->height()*0.05); // 设置输入框大小:宽度为窗口30%,高度为窗口5%// 设置输入框位置:水平居中,垂直位置在窗口高度的55%处edit1->move((this->width()-edit1->width())/2,this->height()*0.55);edit1->setPlaceholderText("QQ/账号"); // 设置输入框占位提示文本为"QQ/账号"// 创建密码输入框edit2,父窗口为当前窗口QLineEdit *edit2 = new QLineEdit(this);edit2->setFixedSize(this->width()*0.3,this->height()*0.05); // 大小与账号输入框一致// 设置位置:水平居中,垂直位置在窗口高度的60%处(在账号框下方)edit2->move((this->width()-edit1->width())/2,this->height()*0.6);edit2->setEchoMode(QLineEdit::Password); // 设置为密码模式(输入内容显示为圆点/星号)edit2->setPlaceholderText("密码"); // 设置占位提示文本为"密码"// 创建登录按钮btn1,显示图标(路径"D:\\Game\\icon\\qq登录.svg")和文本"登录",父窗口为当前窗口QPushButton *btn1 = new QPushButton(QIcon("D:\\Game\\icon\\qq登录.svg"),"登录",this);btn1->setFixedSize(this->width()*0.3,this->height()*0.25); // 设置按钮大小:宽度30%窗口宽,高度25%窗口高// 设置按钮位置:水平居中,垂直位置在窗口高度的70%处(在密码框下方)btn1->move((this->width()-btn1->width())/2,this->height()*0.7);btn1->setStyleSheet("background:blue;"); // 设置按钮背景色为蓝色}// MyWidget类的析构函数(目前为空实现) MyWidget::~MyWidget() { }
-
QT学习Day1总结
-
一、工具
-
1.1 软件安装
-
下载网址:https://download.qt.io/archive/online_installers/4.2/
-
各系统安装包:Windows(.exe)、Linux(.run)、MAC(.dmg)
-
1.2 安装步骤(9步)
-
点击next
-
选择安装目录(示例:D:\QT2\Qt5.14.2)
-
进入安装环境设置选项
-
Qt5.14.2下勾选MinGW 7.3.0 64-bit
-
Qt5.14.2下3D相关组件全选
-
Developer and Designer Tools下勾选MinGW 7.3.0 64-bit
-
接受许可协议后next
-
选择开始菜单快捷方式目录
-
确认安装(占用2.09GB)
-
-
-
1.3 Qt定义:跨平台C++图形用户界面应用程序框架,提供GUI所需功能,面向对象、易扩展、支持组件编程
-
1.4 Qt优点
-
跨平台,支持几乎所有平台
-
接口简单易上手,对学习其他框架有参考意义
-
简化内存回收机制
-
开发效率高,快速构建应用
-
社区氛围好,市场份额上升
-
支持嵌入式开发
-
-
1.5 Qt介绍
-
用途:图形化界面开发,含界面、进程线程、网络、数据库、文件操作等类库
-
学习重点:类库功能与使用(实例化对象→用类库方法→实现后台逻辑)
-
核心特性:跨平台GUI开发工具
-
使用场景:汽车仪表盘、打印机、医疗器械、大型自动化设备
-
-
1.6 Qt工具介绍
-
Assistant:Qt类库帮助手册工具
-
Designer:图形化界面设计工具(生成.ui文件,标记性语言)
-
uic.exe:.ui文件转标准C++代码(ui_***.h),示例命令:C:\Qt\5.15.2\mingw81_64\bin\uic.exe designer.ui -o ui_designer.h
-
moc.exe:元对象编辑器,将Qt非标准信号槽转标准C++代码
-
rcc.exe:资源管理器,将图片/音频/视频等资源转标准C++代码
-
qmake:工程管理工具,通过.pro文件生成Makefile编译代码
-
Qt Creator:集成开发环境(IDE),集成所有上述工具
-
-
-
二、创建项目工程
-
步骤流程
-
打开Qt Creator,新建项目选“Qt Widgets Application”模板
-
项目位置设置:名称无中文/特殊字符(示例:test1),路径无中文
-
选择构建系统:qmake
-
类信息设置:类名(示例:MyWidget)、基类(QWidget)、生成头文件(.h)、源文件(.cpp)、表单文件(.ui)
-
翻译文件:默认
-
Kit选择:勾选对应版本(示例:Desktop Qt 5.14.2 MinGW 64-bit)
-
完成创建
-
-
-
三、各文件介绍
-
-
项目工程文件(.pro)
-
-
核心配置:QT += core gui(依赖模块);大于Qt4时加QT += widgets
-
示例代码:QT += core gui;greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-
-
-
头文件(.h,示例:mywidget.h)
-
-
防重复包含:#ifndef MYWIDGET_H→#define MYWIDGET_H→#endif
-
包含头文件:#include
-
类定义:class MyWidget : public QWidget(公有继承QWidget)
-
关键宏:Q_OBJECT(用于信号和槽)
-
成员:构造函数(MyWidget(QWidget *parent = nullptr))、析构函数(~MyWidget())
-
-
-
-
源文件(.cpp,示例:mywidget.cpp)
-
-
包含头文件:#include "mywidget.h"
-
构造函数实现:调用父类初始化列表(MyWidget::MyWidget(QWidget *parent) : QWidget(parent))
-
析构函数实现:空实现(默认内存回收)
-
-
-
-
main文件(main.cpp)
-
-
包含头文件:#include "mywidget.h"(自定义窗口)、#include
-
程序入口:int main(int argc, char *argv[])
-
核心操作:实例化QApplication对象(唯一)→实例化MyWidget窗口对象→窗口show()→a.exec()(消息循环阻塞)
-
-
-
-
四、QDebug(输出类)
-
三种使用方式
-
类似printf:qDebug("%s","hello world");
-
类似cout(默认换行,常用):qDebug() << "hello meimei";
-
结合QString::arg():QString name="张三"; QString s=QString("%1,%2,%3").arg(name).arg(100).arg(200); qDebug() << s;
-
-
输出示例:hello world、hello meimei、"张三,100,200"
-
-
五、界面相关设置
-
5.1 求界面大小
-
方法:this->size()(整体大小)、this->width()(宽)、this->height()(高)、this->size().width()/height()
-
示例:qDebug() << this->size() << this->width() << this->height();
-
-
5.2 窗口设置(需包含对应头文件,如
-
-
六、常用类及组件
-
-
QPushButton(按钮类)
-
-
创建方式:new QPushButton()→设父对象;new QPushButton("文本",this);new QPushButton(QIcon("路径"),"文本",this)
-
常用方法:setParent(this)(依赖窗口)、setText("文本")、setStyleSheet("背景色")、move(100,100)(位置)、resize(150,200)(大小)、setIcon(QIcon("路径"))、setEnabled(false)(禁用)
-
示例:QPushButton *btn1=new QPushButton; btn1->setParent(this); btn1->setText("第一个按钮");
-
-
-
-
QLineEdit(行编辑器类)
-
-
常见功能:密码回显、默认文本、占位提示
-
示例1(密码):QLineEdit *edit1=new QLineEdit(this); edit1->setEchoMode(QLineEdit::Password);
-
示例2(默认文本):QLineEdit *edit2=new QLineEdit("张三",this); edit2->move(200,200);
-
示例3(占位提示):QLineEdit *edit3=new QLineEdit(this); edit3->setPlaceholderText("QQ号码/手机/邮箱");
-
-
-
-
QLabel(标签类,显示文本/图片)
-
-
显示文本:QLabel *lab1=new QLabel(this); lab1->setText("我是一个标签"); lab1->resize(100,100);
-
显示图片:QLabel *lab2=new QLabel(this); lab2->setPixmap(QPixmap("图片路径")); lab2->setScaledContents(true);(自动适应)
-
-
-
补充:QMovie(动图类)
-
用法:QMovie *mv=new QMovie("动图路径"); lab->setMovie(mv); mv->start();(动图播放)
-
示例:QLabel *lab=new QLabel(this); QMovie *mv=new QMovie("zz.gif"); lab->setMovie(mv); mv->start();
-
-
-
七、帮助手册使用
-
查看内容
-
类基本信息:类名(如QPushButton)、描述、头文件(#include
-
成员:属性(Properties)、公共成员函数(Public Functions)、重写函数、公共槽函数(Public Slots)、受保护函数
-
详细描述(Detailed Description):类功能与使用说明
-
-
-
八、坐标轴
-
核心逻辑:组件需指定父组件才能依赖窗口显示,组件位置(move(x,y))基于父组件坐标系
-
-
九、对象树
-
核心机制:Qt核心特性之一(与信号槽、事件机制并列)
-
规则:组件指定父组件后,父组件将子组件加入对象树;父组件释放前,确保子组件先释放,无需手动管理子组件内存
-
作用:简化内存回收机制
-
关键区别:对象间的父子关系 ≠ 类继承的父子关系
-
-