老师说有项目需要用到QT,看了Qt教程,对QT进行了简单的了解
Qt是什么
Qt是一个跨平台的C++图形用户界面应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,比如控制台工具和服务器。
QT环境
搭建环境 QT的 Hello World
#include <QApplication>
#include <QWidget> //窗口的控件
#include<QPushButton>
#include<QLabel>
int main (int argc, char **argv){
QApplication app(argc, argv);
//窗口
QWidget W;
W.setWindowTitle(QString("我是标题"));
QLabel *label = new QLabel(&W);
label->setText("Hello World");
//按钮
QPushButton B;
B.setText("我是按钮");
B.setParent(&W);
B.move(100,100);
W.show();
return app.exec();
}
界面:
在这里的“ · ”和“ -> "用法是一样的
图形用户界面
Qt的图形用户界面的基础是QWidget。QWidget不是一个抽象类别。Qt中所有类型的GUI组件如按钮、标签、工具栏等都派生自QWidget,而QWidget本身则为QObject的子类。Widget负责接收鼠标,键盘和来自窗口系统的其他事件,并描绘了自身显示在屏幕上。每一个GUI组件都是一个widget,widget还可以作为容器,在其内包含其他Widget。
布局
布局管理类别用于描述一个应用程序的用户界面中的Widget是如何放置。当视窗缩放时,布局管理器会自动调整widget的大小、位置或是字号,确保他们相对的排列和用户界面整体仍然保有可用性。
QT有内置的布局管理类型:
学习了布局简单的完成了界面:
信号和槽
Qt利用信号与槽(signals/slots)机制取代传统的callback来进行对象之间的沟通。当操作事件发生的时候,对象会发提交一个信号(signal);而槽(slot)则是一个函数接受特定信号并且运行槽本身设置的动作。信号与槽之间,则透过QObject的静态方法connect来链接。
信号在任何运行点上皆可发射,甚至可以在槽里再发射另一个信号,信号与槽的链接不限定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到同一个槽,甚至信号也可连接到信号。
以往的callback缺乏类型安全,在调用处理函数时,无法确定是传递正确类型的参数。但信号和其接受的槽之间传递的数据类型必须要相匹配,否则编译器会提出警告。信号和槽可接受任何数量、任何类型的参数,所以信号与槽机制是完全类型安全。
信号与槽机制也确保了低耦合性,发送信号的类别并不知道是哪个槽会接受,也就是说一个信号可以调用所有可用的槽。此机制会确保当在"连接"信号和槽时,槽会接受信号的参数并且正确运行。
说白了,把信号和槽可以比喻为短信, 一条短信可以发给多个人,一个人也可以接受多条短信
利用信号和槽实现窗口跳转
实现代码:
QT中Lambda表达式实现信号和槽
Lambda表达式,不用定义槽函数,不用指定信号接收者;需要在头文件中添加 CONFIG += C++11
最终实现代码,效果和上面完全一致
= : 把外部所有局部变量,类中所有成员函数以值传递方式
总结
QT可视化编程,不那么抽象,但是QT编译器有点“坑”,反应慢的不行
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。