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游戏制作-翻金币案例