## Qt介绍
### 多平台C++图形界面应用层编程框架
## 界面设计
### 简单方法: 在界面设计模式下,通过拖拽基础控件进行设计。
## 基础控件
~~~cpp
1 <QLCDNumber Class>
基础方法:
display(); //显示
value(); //获取
setFixedSize();//设置固定大小
2 <QPushButton Class>
基础方法:
setText(); //设置字符串
text(); //获取
setFixedSize();//设置固定大小
信号:
clicked(); //当按钮按下触发该信号
3 <QLineEdit Class>
基础方法:
setText(); //设置字符串
text(); //获取
setFixedSize(); //设置固定大小
clear(); //清空
insert(); //追加插入
4 <QTextEdit Class>
基础方法:
setText(); //设置字符串
append(); //追加显示
setFixedSize(); //设置固定大小
clear(); //清空
~~~
==调试打印==
```cpp
#include <QDebug>
qDebug()<<"调试信息"; //输出调试信息
```
## Qt基本工作原理
### 事件驱动 + 信号与槽
### 关联信号与槽
~~~cpp
方法1: 通过connect实现信号与槽的绑定。
connect( sender, SIGNAL(signal),receiver, SLOT(method) );
// 发送者, 信号, 接收者, 方法
方法2: 在界面设计模式下,找到发送者控件右键转到槽选择信号进行绑定。
注意:信号与槽的参数匹配
~~~
## <font color=red>作业:</font>
```cpp
编程实现简易计算器
基本功能:实现+ - * / 退格,清空
扩展功能: 实现历史记录
涉及的知识点:
类型转换 int QString double
//https://www.cnblogs.com/lvchaoshun/p/7270576.html
split() ; //对Qstring进行分割
sscanf(); //进行格式提取
```
## 1. 布局方式(布局器)
### 1.1 绝对布局
~~~cpp
基本原理:控件对象直接调用setGeometry();设置绝对坐标即可。
~~~
### 1.2 水平布局 (QHBoxLayout)
~~~cpp
基本方法:
addWidget(); //添加控件
addLayout(); //添加布局器
~~~
### 1.3 垂直布局(QVBoxLayout)
~~~cpp
基本方法:
addWidget(); //添加控件
addLayout(); //添加布局器
~~~
### 1.4 栅格布局 (QGridLayout)
~~~cpp
基本方法:
addWidget(); //添加控件
addLayout(); //添加布局器
~~~
## 2.文件对话框
~~~cpp
<QFileDialog Class>
基本方法:
getOpenFileName(); //获取打开的文件路径名
getOpenFileNames(); //获取打开的多个文件路径名
~~~
## 3. 基础控件
~~~cpp
<QLabel Class>
基础方法:
setText(); //设置字符串
setPixmap(); //显示图片
setMinimumSize(); //设置最小尺寸
~~~
## <font color=red>作业:</font>
```cpp
图片浏览器
基本要求: 1.纯代码生成界面 2.实现图片切换 3.记录浏览过的图片
扩展功能: 实现幻灯片播放、缩放、显示gif图片
提示:
scaled();
<QMovie Class>
```
## 1. 对话框
~~~cpp
1.文件对话框(QFileDialog)
基本方法:
getOpenFileName(); //获取打开的文件路径名
getOpenFileNames(); //获取打开的多个文件路径名
getSaveFileName(); //获取保存的文件路径名
getExistingDirectory(); //获取文件夹
2.消息对话框(QMessageBox)
基本方法:
about() //普通消息(没有图标而已)
aboutQt() //关于qt信息
critical() //错误
information() //信息
question() //询问
warning(); //警告
3.输入对话框(QInputDialog)
基本方法:
getText(); //获取字符串
getInt(); //获取整形
getDouble(); //获取浮点数
getItem(); //获取item
4.颜色对话框(QColorDialog)
基本方法:
getColor(); //获取颜色
5.字体对话框(QFontDialog)
基本方法:
getFont(); //获取字体
~~~
## 2. 主窗口
~~~cpp
1.标题栏WindowTitle
setWindowTitle(); //设置标题
setWindowIcon(); //设置图标
2.菜单栏QMenuBar、QMenu、QAction
QMenuBar *mbar = menuBar(); //获取QMenuBar对象
QMenu *file = new QMenu("文件");
mbar->addMenu(file); //将Menu添加到MenuBar
QAction *file_open = new QAction(QIcon(":/icon/open.png"),"打开文件");
file->addAction(file_open); //将Action添加到Menu
3.工具栏QToolBar
QToolBar *tbar = addToolBar("工具"); //获取QToolBar对象
tbar->addAction(file_open); //将Action添加到ToolBar
4.中央窗口CentralWidget
QTextEdit *te = new QTextEdit;
this->setCentralWidget(te); //将QTextEdit添加到中央窗口
5.状态栏QStatusBar
QStatusBar *sbar = statusBar(); //获取QStatusBar对象
QLabel *lab = new QLabel("new.txt");
sbar->addWidget(lab); //把标签放到状态栏中
~~~
## 3. 基础控件
~~~cpp
<QTextEdit Class>
基本方法:
setText();
append();
clear();
setFont(); //设置字体
setCurrentFont(); //设置当前字体
setTextColor(); //设置字体颜色
copy(); //复制
paste(); //粘贴
toPlainText(); //获取
insertPlainText(); //插入数据
~~~
## <font color=red>作业:</font>
```cpp
文本编辑器
基本要求:实现文本编辑,字体设置,颜色设置,复制与粘贴
扩展功能:查找、打开文件与保存文件
```
## 1. 事件机制
基本原理:重写对应的虚函数。
~~~cpp
1.鼠标事件
void mousePressEvent(QMouseEvent *event); //捕获鼠标点击事件
void mouseDoubleClickEvent(QMouseEvent *event); //捕获鼠标双击事件
void mouseReleaseEvent(QMouseEvent *event); //捕获鼠标释放事情
void mouseMoveEvent(QMouseEvent *event); //捕获鼠标移动事件
void wheelEvent(QWheelEvent *event); //滚轮事件
//setMouseTracking(true); //开启鼠标追踪功能
<QMouseEvent Class>
基本方法:
pos(); //鼠标坐标
button(); //鼠标键值
<QWheelEvent Class>
基本方法:
angleDelta(); //滚轮的旋转角度
2.键盘事件
void keyPressEvent(QKeyEvent *event); //按键按下
void keyReleaseEvent(QKeyEvent *event); //按键释放
<QKeyEvent Class>
基本方法:
key(); //键盘键值
isAutoRepeat(); //检测到自动重复
3.绘图事件();
void paintEvent(QPaintEvent *event); //绘图事件
注意: update(); //刷新绘图事件
4.定时事件
void timerEvent(QTimerEvent *event); //定时事件
注意: 通过startTimer(); //启动
通过killTimer(); //结束
~~~
## 2. 基础控件
~~~cpp
<QPainter Class>
基本方法:
setPen(); //设置笔
setFont(); //设置字体
drawPoint(); //绘制点
drawLine(); //绘制线段
drawRect(); //绘制矩形
drawEllipse(); //绘制圆
drawText(); //写文字
drawPixmap(); //绘制图片
translate(); //移动位置
rotate(); //旋转
painter.setRenderHint(QPainter::Antialiasing, true); //抗锯齿
<Qtimer Class>
基本方法:
start();
stop();
重要信号:
timeout(); //当设定的时间到了 触发该信号
~~~
## <font color=red>作业:</font>
```cpp
作业1:
设计一个小游戏,例如打地鼠
基本功能:打地鼠
扩展功能:统计分数
作业2:
设计一个时钟,动态显示时间
基本功能:显示系统时间
扩展功能:可以修改时间
```
## 1. 文件操作
~~~cpp
<QFile Class>
基本方法:
oepn(); //打开
close(); //关闭
read(); //读
readAll(); //全都读取
readLine(); //按行读取
atEnd(); //在末尾
write(); //写入
注意打开方式:QIODevice::ReadOnly,QIODevice::WriteOnly,QIODevice::ReadWrite,QIODevice::Append
QIODevice::Truncate
~~~
## 2. 文件属性
~~~cpp
<QFileInfo Class>
基本方法:
size(); //大小
baseName(); //基本名
fileName(); //基本名(带后缀)
suffix(); //后缀
absoluteFilePath(); //文件名带路径
path(); //路径名
isDir(); //判断是否是文件夹
~~~
## 3. 文件夹的遍历
~~~cpp
<Qdir Class>
基本方法:
entryList(); //获得文件下的所有文件的基本名(带后缀)
entryInfoList(); //获得文件下的所有文件的属性
注意:根据需求设置过滤器
~~~
## 4. Qt网络编程
准备工作:
1.在pro文件中,添加库文件network 例如:QT += core gui network
2.在.h文件中,添加对应的头文件
~~~cpp
1.<QTcpSocket Class>
基本方法:
connectToHost(); //连接服务器
read(); //接收
wirte(); //发送
close(); //关闭
重要的信号:
readyRead(); //当数据到达缓冲区 触发该信号
connected(); //连接成功
disconnected(); //断开连接
error(QAbstractSocket::SocketError); //错误
stateChanged(); //状态变化
2.<QUdpSocket Class>
基本方法:
writeDatagram(); //发送udp数据
readDatagram(); //接收udp数据
重要的信号:
readyRead(); //当数据到达缓冲区 触发该信号
~~~
## <font color=red>作业:</font>
```cpp
简易文件传输客户端
基本功能:发送与接收文本文件
扩展功能:支持查看服务器上的资源文件,发送与接收任意文件。
```
## 1. 界面跳转
~~~cpp
基本原理:
new出第二个窗口对象,执行show方法,原窗口关闭或隐藏
返回:当第二个窗口关闭时,触发关闭信号,第一窗口接收到该信号,执行show (通过connect函数实现)
~~~
## 2. 多媒体
//注意:使用时添加库文件multimedia multimediawidgets
~~~cpp
1 <QMediaPlayer Class>
基本方法:
play(); //播放
pause(); //暂停
stop(); //停止
setMedia(); //设置Media
setPlaylist(); //设置播放列表
setVideoOutput();//设置视频输出
setMuted(); //禁音
setVolume(); //设置音量
重要信号:
positionChanged(); //位置变化
error(); //错误
stateChanged(); //播放状态
2 <QVideoWidget Class>
基本方法:
show(); //显示
setBrightness(); //设置亮度
showFullScreen();//全屏显示
3 <QMediaPlaylist Class>
基本方法:
addMedia(); //添加Media
clear(); //清空
currentIndex(); //获取当前index
currentMedia(); //获取当前media
removeMedia(); //删除Media
setPlaybackMode(); //设置播放模式
next(); //下一首
previous(); //上一首
~~~
## <font color=red>作业:</font>
```cpp
Qt综合项目
```
1. Qt数据库编程
1 <QSqlDatabase Class>
基本方法:
addDatabase(); //添加对应的驱动
setDatabaseName(); //设置数据库名
open(); //打开数据库
exec(); //执行sql语句
close(); //关闭
2 <QSqlQuery Class>
基本方法:
exec(); //执行sql语句
next(); //定位到value处
value(); //获取value
2. Qt网络编程之服务器
1 udp服务器
<QUdpSocket Class >
基本方法:
bind(); //绑定地址信息
readDatagram(); //接收数据
writeDatagram(); //发送数据
hasPendingDatagrams(); //判断是否有数据
重要信号:
readyRead();
2 tcp服务器
<QTcpServer Class>
基本方法:
listen(); //绑定并进入监听状态
nextPendingConnection(); //建立连接
重要信号:
newConnection(); //有新的连接
<QTcpSocket Class>
基本方法:
read();
readAll();
write();
重要信号:
readyRead();
3.容器
1 <QListWidget Class>
基本方法:
addItem(); //添加item
currentItem(); //获取当前item
clear(); //清空
currentRow(); //对应的行
setDragEnabled(); //允许拖出
setAcceptDrops(); //允许拖入
重要信号:
itemClicked(); //单击
itemDoubleClicked(); //双击
itemEntered(); //拖拽item时触发
2 <QScrollArea Class>
基本方法:
setWidget(); //设置控件
takeWidget(); //获取控件对象
setAlignment(); //设置对齐方式
3 <QTabWidget Class>
基本方法:
addTab(); //添加Tab
removeTab(); //删除Tab
currentIndex(); //当前Tab索引
setTabsClosable(); //设置是否添加关闭按钮
重要信号:
tabBarClicked(int); //点击tabBar
tabCloseRequested(int); //关闭请求信号
4.<QStackedWidget Class>
基本方法:
addWidget(); //添加
removeWidget(); //删除
setCurrentIndex(); //显示当前Widget
setCurrentWidget(); //显示当前Widget
作业:
Qt综合项目