QT - 1
Qt历史:
- 1991年-奇趣科技开发
- 优点
2.1 跨平台
2.2 效率高
2.3 嵌入式
2.4 市场份额好 - 成功案例:
3.1 Linux桌面环境
3.2 wps
3.3 谷歌地图
3.4 屏幕共享
3.5 VLC
---------------------------------------------------------------------
实例1:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
//应用程序对象, a, Qt中有且仅有一个应用程序对象
QApplication a(argc, argv);
//创建Widget对象w, Widget基类 Qwidget
Widget w;
//默认窗口是不会弹出的,如果想弹出,调用show方法
w.show();
//a.exec()进入消息循环机制
return a.exec();
}
.pro文件介绍:
QT += core gui //qt包含的模块 core与gui
//大于4版本的qt 包含widget模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = first //生成的目标文件 'first'
TEMPLATE = app //模板 应用程序
//
DEFINES += QT_DEPRECATED_WARNINGS
CONFIG += c++11
//源文件
SOURCES += \
main.cpp \
widget.cpp
//头文件
HEADERS += \
widget.h
FORMS += \
widget.ui
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
生成的头文件文件介绍:
#ifndef WIDGET_H //防止头文件重复编译
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT //Q_OBJECT宏,写了这个宏,就支持了QT中的信号和槽机制
public:
explicit Widget(QWidget *parent = nullptr); //构造函数
~Widget(); //析构函数
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
生成widget文件介绍:
#include "widget.h"
#include "ui_widget.h"
#include <Q>
Widget::Widget(QWidget *parent) : //构造函数
QWidget(parent), //初始化列表
ui(new Ui::Widget) //
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
QT命名规范&快捷键
1.类名首字母大写,单词与单词之间首字母大写
2.函数,变量 首字母小写, 单词与单词之间 首字母大写
ctrl + B 编译
ctrl + R 运行
ctrl + F 查找
ctrl + 鼠标滚轮 字体缩放
ctrl + i 自动对齐
ctrl + / 多行注释
ctrl + shift + up / down 整行移动
帮助文档的简单介绍
Header: #include
qmake: QT += widgets //需要包含的模块
Inherits: QAbstractButton //父类
Inherited By: QCommandLinkButton //被继承
QT对象树的概念
在Qt中创建对象的时候会提供一个Parent对象指针, 下面来解释parent到底是干什么的
QObject是一对象树的形式组织起来的
当你创建一个QObject对象时,会看到QObject的构造函数接受一个
QObject指针作为参数,这个参数就是parent,也就是父对象指针
当父对象析构的时候,这个列表中的所有对象也会被析构
这种机制在GUI程序设计中相当有用,例如,一个按钮有一个QShortcut
对象作为其子对象.当我们删除按钮的时候,这个快捷键理应当被删除
先析构儿子,然后父亲,但打印顺序相反.
对象树
所有new出来的对象,不用释放
原因children表中的对象会在窗口关闭后进行自动释放
QT中的信号和槽
connect(信号发送者, 发送的信号, 信号的接收者, 处理的函数(槽函数));
查找button按钮的信号
QPushButton里:
Qt 5 Assistant-> QPushButton-> Additional Inherited Members ->
QAbstractButton-> Signals
void clicked(bool checked = false) //点击或松开时触发
void pressed() //按下触发
void released() //弹起触发
void toggled(bool checked) //按下是True,弹起False
例 -> 点击按钮触发事件:
Linux:
connect(btn2, SIGNAL(clicked()), this, SLOT(close()));
windows:
connect(Btn, &QPushButton::clicked, this, &QWidget::close)
connect(Btn, QPushButton::clicked, this, QWidget::close)
自定义信号函数写法:
创建c++类-> QObject -> 头文件
//自定义的信号,需要写到signals下
//返回类型必须为void
//信号只需声明,不需要实现
//信号可以有参数,可以重载
自定义槽函数写法:
在头文件中
写在: public slots:下
//高版本可以写到public下或全局函数
//槽函数返回值为void
//槽函数需要声明,也需要实现
//槽函数也可以有参数,也可以重载