【QT学习记录】

本文详细记录了QT的学习过程,包括QTcreat的下载安装步骤,第一天学习了QT基础,如创建项目、窗口控件、信号槽机制;第二天涉及菜单栏、资源文件、对话框和界面布局;第三天讲解了事件处理、定时器和绘图;最后介绍了使用QT制作翻金币游戏的基础知识。
摘要由CSDN通过智能技术生成

QT creat下载安装

1.下载地址:根据系统选择下载版本—示例为windows
在这里插入图片描述

2.安装包,双击安装
在这里插入图片描述

3.同意条款
在这里插入图片描述

4.选择安装目录
在这里插入图片描述

5.选择需要的模块,未选的以后也可以添加
接下来全部点击下一步即可
在这里插入图片描述

QT学习安排:

第一天:

1、 QT的介绍、优点、成功案例
1991年 奇趣科技
开源、跨平台、接口简单,容易上手、一定程度上简化了内存回收
Linux桌面环境
2、 创建第一个Qt程序
点击创建项目后,选择项目路径以及项目起始名称
名称不能有中文和空格
在这里插入图片描述
QWidget:空白窗口
QMainWindow:主界面窗口
QDialog:对话框
继承关系

Main函数:
//a应用程序对象,在Qt中,应用程序对象有且仅有一个
QApplication a(argc, argv);
//窗口对象
MainWindow w;
//窗口对象 默认不会显示,必须要调用show方法显示窗口
w.show();
//让应用程序对象进入消息循环
//让代码阻塞到这一行
return a.exec();

3、 熟悉按钮控件的常用API
创建:QPushButton *bn1=new QPushButton(“你好啊”,this);
设置父亲:setParent(this)
设置文本:setText(“文本”)
设置位置:move(宽,高)
重新指定窗口的大小 resize()
设置窗口标题:setWindowTitle()
设置窗口固定大小:setFixedSize()
4、 对象树的概念
在这里插入图片描述

父对象被释放时,子对象会跟随释放
当创建的对象在堆区的时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,系统会将对象放入到对象树中
一定程度上简化了内存的回收机制
5、 Qt中的坐标系统
在这里插入图片描述

以左上角为原点(0,0),X向右增加,Y向下增加
6、 信号和槽的基本使用与扩展
在这里插入图片描述

Connect(信号的发送者,发送的具体信号,信号的接收者,信号的处理(槽))
信号槽的优点,松散耦合,信号发送端和接收端本身是没有关联的,通过connect链接,将两端耦合在一起
//需求 按钮 点击 关闭
//参数1:信号发送者,参数2:发送的信号(函数的地址),参数3:信号的接收者,参数4:处理的槽函数
connect(bn1,&QPushButton::clicked,this,&QWidget::close);//点击按钮,关闭窗口
7、自定义信号和槽
1自定义信号
写到signals下
返回void
需要声明,不需要实现
可以有参数,可以重载

2自定义槽函数
返回void
需要声明,也需要实现
可以有参数,可以重载
写到public下

3案例
下课后,老师触发饿了信号,学生执行请老师吃饭槽
7、 当自定义信号和槽出现重载
需要利用函数指针明确指向函数的地址
Void(Teacher:: tSignal)(参数)=&Teacher::hungry;
.ToUtf8() QString 转为 QByteArray
.Data() QByteArray转为char

8、 信号连接信号
在这里插入图片描述

断开链接(disconnect)
9、拓展
(1)信号是可以连接信号
(2)一个信号可以连接多个槽函数
(3)多个信号可以连接同一个槽函数
(4)信号和槽函数的参数类型必须一一对应
(5)信号和槽的参数个数 是不是要一致?信号的参数个数,可以多于槽函数的参数个数
10、Lambda表达式
[]标识符 匿名函数
=值传递
&引用传递
()参数
{}实现体
Mutable修饰 值传递变量,可以修改拷贝出的数据,改变不了实体
常用:={};
在这里插入图片描述

第二天:

1、 带菜单栏的窗口
菜单栏、工具栏、状态栏、铆接部件(QDockWidget浮动窗口)
2、 资源文件
(1)将图片文件拷贝到项目位置下
(2)右键项目->添加新文件-》QT->给资源文件起名
(3)res生成res.qrc
(4) open in editor编辑资源
(5)添加前缀 添加文件
(6)使用资源文件中的文件路径:“:/文件名/文件”
3、 对话框
3.1分类:
模态对话框 不可以对其他窗口进行操作
QDialog dig(this);
Dig.exec();
非模态窗口 可以对其他窗口进行操作
防止一闪而过 使用new创建到堆区
QDialog *dlg2=new QDialog(this);
dlg2->setAttribute(Qt::WA_DeleteOnClose);
dlg2->show();
qDebug()<<“非模态对话框开始了”;

3.2消息对话框
QMessageBox静态成员函数 创建对话框
错误、信息、提问、警告
参数1:父亲 参数2:标题 参数3 :内容
其他消息框
颜色对话框QColor color=QColorDialog::getColor(QColor(255,0,0));

//文件对话框 参数1:父亲 参数2:标题 参数3:默认打开路径 参数4:过滤文件格式
返回值是选中文件的路径
QFileDialog::getOpenFileName(this,”打开文件”,“C:\User\Desktop”,”(*.txt)”);
字体对话框 返回值QFont (字体,是否加粗,是否倾斜)
QFontDialog::getFont(&flg,QFont(“华文彩云“));
4、 界面布局
(1) 实现登录窗口
(2) 利用布局方式 给窗口进行美化
(3) 选取widget进行布局,水平布局、垂直布局、栅格布局
(4) 给用户名、密码、登录、退出按钮进行布局
(5) 默认窗口和控件之间有9间隙,可以调整layoutLeftMargin
(6) 利用弹簧布局
5、 常用控件
1、 按钮组
QPushButton 常用按钮
QToolButton 工具按钮 用于显示图片,如图想显示文字,修改风格
ToolButtonStyle,凸起风格 autoRaise
RadioButton 单选按钮,设置默认ui->rBtnMan->setChecked(true)
Checkbox多选按钮,监听状态,2选中 1半选 0未选中
2、 QListWidget列表容器
QListWidgetItem *item一行内容
Ui->listWidget->addItem(item)
设置居中方式item->setTextAlignment(Qt::AlignHCenter);
可以使用additems一次性添加整个内容
3、 QTreeWidget树控件
设置头ui->treeWidget->setHeaderLabels(QStringList()<<”英雄”<<”英雄介绍”;
创建根节点QTreeWidgetItem *liItem=new QTreeWidgetitem(QStringList()<<”力量”);
添加根节点到树控件上ui->treeWidget->addTopLevelItem(liItem);
添加子节点liItem->addChild(l1);
其他控件:
在这里插入图片描述

6、 自定义控件
添加新的文件 Qt设计师界面类(.h,.cpp,.ui)
.ui中设计控件,可以使用已有的控件向其中添加,形成一个组合控件
Widget中使用自定义控件,拖拽一个Widget,点击提升为,点击添加,点击提升
实现功能,改变其中一个控件,另一个控件将跟随改变
提供setNum和getNum对外接口
测试接口

第三天:

1、 事件处理
鼠标事件
鼠标进入事件 enterEvent
鼠标离开事件 leaveEvent
鼠标按下 mousePressEvent(QMouseEvent ev)
鼠标释放 mouseReleaseEvent
鼠标移动 mouseMoveEvent
Ev->x() x的坐标 ev->y() y坐标
Ev->button() 可以判断所有按键 Qt::LeftButton Qt::RightButton
Ev->button() 判断组合按键 判断move时候的左右按键 结合&操作符
格式化字符串 QString(“%1 %2).arg(str1).arg(str2);
2、 定时器
(1) 定时器1
利用事件void timerEvent(QtTimerEvent *ev)
启动定时器startTimer(1000)毫秒单位 返回定时器的id号
TimerEvent的返回值是定时器的唯一标识 可以与ev->timerid作比较
(2)定时器2
QTimer类
创建QTimer对象timer,start(500)启动定时器,connect(timer,&QTimer::timeout,{});时间到时发送信号,执行对应的槽函数
暂停 timer->stop()
3、 Event事件分发器
在这里插入图片描述

用途:用于事件的分发
也可以做拦截操作,不建议 直接根据参数的状态返回true
Bool event(QEvent *e);
返回值如果是true代表用户处理,这个事件不向下分发了
e->type()==鼠标按下
4、 事件过滤器
在这里插入图片描述

1、	给控件安装事件过滤器
2、	重写eventfilter函数

5、 QPainter绘图
(1)//绘图事件 void paintEvent()
声明一个画家对象 QPainter painter(this) this指绘图设备
画线、画图、画矩形、画文字
设置画笔QPen设置画笔宽度、风格
设置画刷QBrush设置画刷风格
(2)Painter的高级设置
抗锯齿
painter.setRenderHint(QPainter::Antialiasing);
对画家进行移动
painter.translate(100,0);
恢复画家的上一次移动位置
painter.restore();
(3)如果想手动调用绘图事件 利用update
利用画家画图片 painter.drawPixmap(po_X,100,QPixmap())
6、 绘图设备的使用
QPixmap,QImage
(1)QPixmap对不同平台做了显示的优化
(2)QImage可以对像素进行访问
(3)QPicture可以记录和重现画图的指令 保存时,任意后缀名
7、 Qfile文件读写操作
QFile进行读写操作
QFile file(path)
File.open(打开方式) QIODevice::readOnly QIODevice::readWrite

File.readAll() 全部读取
readLine()按行读取,atend()是否读到文件尾
默认 utf-8
关闭 Close

第四、五天

Qt游戏制作-翻金币案例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月光在发光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值