Qt入门
Qt内存回收机制
在Qt中在堆上创建对象并且是QObject的子类(包含间接子类),构造方法传入父对象,创建时会把自己加入到父对象的children中,释放时先调用子对象的析构方法。
停靠窗口(Dock Widget)
docked:这个属性是否允许停靠窗口停靠
单行文本: LineEdit
弹簧:只有在布局中才能起作用,弹簧可以设置固定宽度,sizeType属性 expanding表示可以伸缩的 Fixed表示固定的
布局的 layoutSpacing属性表示两个空间之间的间隔,默认是6个像素
QPushButton使用
1 作为普通按钮,可以显示图标和文本
2 设置checkable属性,使其持续性处于被选中状态,开关
3 关联一个菜单, 点击按钮菜单弹出 setMenu(QMenu *menu); 倒三角图标
4 setDefault()绑定按钮和回车键,点击回车等同于点击按钮
设置QPushButton的点击动作两种方法:
1 使用可视化工具右键点击“转到槽”, 选中clicked
2 使用connect方法连接:
不可选中按钮
connect(ui->normalBtn, &QPushButton::clicked, this, [=]()
{
qDebug() << “我是一个普通按钮, 图标是小猪佩奇…”;
});
可选中按钮
connect(ui->checkedBtn, &QPushButton::toggled, this, [=](bool bl)
{
qDebug() << “我是一个checked按钮, 当前状态为:” << bl;
});
QToolButton与QPushButton 区别,关联菜单(QMenu)时,可以设置菜单的弹出方式
样式-英文 参数 样式-中文
color: white rgb(110,110,110) #eb7350 前景颜色,字体颜色
background: transparent 背景为透明
background-color: white rgb(110,110,110) #eb7350 背景颜色
background-position: left right center top bottom 设定图片的位置
background-image:url() ./img/back.jpg 背景图片 ,不缩放图片大小
border-image:url() ./img/back.jpg 背景图片,会对图片进行拉伸,平铺
border-style: outset inset 边框样式,按下是inset
border-width: px 边框大小
border-radius: px 边框弧度
border:3px solid red px color 边框宽度以及颜色
border-color: rgba(255, 225, 255, 30); color 边框颜色
font-family 微软雅黑 设定字体所属家族
font: bold 14px bold px 字体大小并加粗
font-size: px 字体大小
font-style: inset 字体样式
font-weight: px 字体深浅
selection-color: color 设定选中时候的颜色
QT事件处理
事件派发 -> 事件过滤->事件分发->事件处理
事件(event)是由系统或者 Qt 本身在不同的场景下发出的。当用户按下 / 移动鼠标、敲下键盘,或者是窗口关闭 / 大小发生变化 / 隐藏或显示都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如鼠标 / 键盘事件等;另一些事件则是由系统自动发出,如计时器事件。
每一个 Qt 应用程序都对应一个唯一的 QApplication 应用程序对象,然后调用这个对象的 exec() 函数,这样 Qt 框架内部的事件检测就开始了(程序将进入事件循环来监听应用程序的事件)。
分发过程
1 当事件产生之后,Qt 使用用应用程序对象调用 notify() 函数将事件发送到指定的窗口
1 | [virtual protected] bool QApplication::notify(QObject *receiver, QEvent *e); |
2 事件在发送过程中可以通过事件过滤器进行过滤,默认不对任何产生的事件进行过滤。
1 | // 需要先给窗口安装过滤器, 该事件才会触发 |
3 当事件发送到指定窗口之后,窗口的事件分发器会对收到的事件进行分类:
1 | [virtual protected] bool QWidget::event(QEvent *event); |
4 事件分发器会将分类之后的事件(鼠标事件、键盘事件、绘图事件。。。)分发给对应的事件处理器函数进行处理,每个事件处理器函数都有默认的处理动作(我们也可以重写这些事件处理器函数),比如:鼠标事件:
1 | // 鼠标按下 |
事件处理器函数
通过上面的描述可以得知:Qt 的事件处理器函数处于食物链的最末端,每个事件处理器函数都对应一个唯一的事件,这为我们重新定义事件的处理动作提供了便利。另外,Qt 提供的这些事件处理器函数都是回调函数,也就是说作为使用者我们只需要指定函数的处理动作,关于函数的调用是不需要操心的,当某个事件被触发,Qt 框架会调用对应的事件处理器函数。
QWidget 类是 Qt 中所有窗口类的基类,在这个类里边定义了很多事件处理器函数,它们都是受保护的虚函数。我们可以在 Qt 的任意一个窗口类中重写这些虚函数来重定义它们的行为。下面介绍一些常用的事件处理器函数:
鼠标事件
鼠标按下事件
当鼠标左键、鼠标右键、鼠标中键被按下,该函数被自动调用,通过参数可以得到当前按下的是哪个鼠标键
1
[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event);
鼠标释放事件
当鼠标左键、鼠标右键、鼠标中键被释放,该函数被自动调用,通过参数可以得到当前释放的是哪个鼠标键
1
[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event);
鼠标移动事件
当鼠标移动(也可以按住一个或多个鼠标键移动),该函数被自动调用,通过参数可以得到在移动过程中哪些鼠标键被按下了。
1
[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event);
鼠标双击事件
当鼠标双击该函数被调用,通过参数可以得到是通过哪个鼠标键进行了双击操作。
1
[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event);
鼠标进入事件
当鼠标进入窗口的一瞬间,触发该事件,注意:只在进入的瞬间触发一次该事件
1
[virtual protected] void QWidget::enterEvent(QEvent *event);
鼠标离开事件
当鼠标离开窗口的一瞬间,触发该事件,注意:只在离开的瞬间触发一次该事件
1
[virtual protected] void QWidget::leaveEvent(QEvent *event);
键盘事件
键盘按下事件
1
[virtual protected] void QWidget::keyPressEvent(QKeyEvent *event);
键盘释放事件
1
[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event);
天气预报项目
1 qt中解析json数据
qt5.0开始提供对json的支持
json相关的类
QJsonObject
插入键值对: insert()方法
查询:contains() 方法 或 find()方法
大小: size()方法
QJsonArray
插入方法: append(const QJsonValue &value)方法 prepend(const QJsonValue &value)方法
insert(int position, const QJsonValue &value) 在positon之后插入
push_back(const QJsonValue &value)
push_front(const QJsonValue &value)
获取数据 count() size()
获取指定位置 at(int i)
删除指定位置 removeAt(int i)
QJsonValue
封装了六种qt的基本类型
QJsonValue::Bool
QJsonValue::Double
QJsonValue::String
QJsonValue::Array json数组
QJsonValue::Object json对象
QJsonValue::Null
构造QJsonValue
1 | //字符串 |