Qt支持:Windows、Linux、Solaris、SunOS、FreeBSD、BSD/OS、SCO、AIX、OS390、QNX 、android等操作系统。
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
Qt包括多达500个以上的C++类,还提供基于模板的collections,serialization,file,I/0 device,directory management,date/time类。甚至还包括正则表达式的处理功能。
Qt Designer:界面设计编辑工具
Qt Assistant: Qt技术文档文档浏览器
Qt Linguist:国际化语言翻译工具
Qt Creator:集成开发环境(IDE)
可在Windows、Linux/X11和Mac OS X桌面操作系统上运行
供开发人员针对多个桌面和移动设备平台创建应用程序。
1、UI设计与代码开发的无缝协作
2、支持Qt Quick开发
3、支持移动设备上的应用开发(Android,黑莓,iOS )
4、支持嵌入式设备开发
lupdate:根据项目文件(.pro)读取源码中需要翻译的内容生成翻译文件(.ts)
lupdate xxx. pro
将生成或更新项目文件中的翻译源文件ts文件
lrelease:把翻译文件(.ts)翻译成二进制的. qm文件
lrelease xxx.ts
将把项目中的翻译源文件ts文件生成二进制qm文件
qmake: Makefile生成器,能根据工程文件(.pro)产生不同平台下Makefile
uic:把ui文件(xml语法的界面文件)自动生成相应的C++代码
moc:元对象编译器
Qt的核心库,包含了直观的C++API以及类CSS/JavaScript编程的Qt Quick
D:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin\assistant.exe
1、信号与槽 -- 建立2个不同窗口控件的通信
2、内存管理 --对象树,父对象负责所有的子对象的内存的管理和释放
3、事件处理 -- 每一个用户的输入QT都会将它封装一个事件
使用new和delete时,,内存在堆中分配。堆内存空间必须通过delete完全释放,以防止内存泄漏。只要不delete,分配在堆上的对象可以一直存活下去。栈是系统自动分配管理的,局部变量就是来自于栈区,只要超出了作用域的栈区数据就会被自动回收。
所有从QObject继承出来的子对象的内存管理都转移给了父对象 使用new在堆上分配内存
子对象可自动被父对象删除内存 手动删除不会引起二次删除,子对象删除时会通知父对象
没有父对象的对象需要手工删除
没有父对象的对象一般分配在栈区,这样可以有效避免内存泄漏
Qt没有自动回收站的机制,需要关注父子关系及其功能
setLayout(QLayout *) ---- 设置整体布局
setFixedSize(int w, int h) --- 设置固定大小
setFixedHeight(int) --- 设置固定高度
setFixedwidth(int) --- 设置固定宽度
setMaximumSize(int w, int h); ---- 设置最大宽高
setMinimumSize(int w, int h); ---- 设置最小宽高
setFont(QFont) ---- 设置字体
setWindowTitle(QString) --- 设置窗口的标题
setWindowIcon(QIcon) --- 设置图标
show() --- 显示界面
hide() --- 隐藏界面
close() --- 关闭界面
槽函数是普通的C++成员函数,可以被正常调用;槽函数可以有返回值,也可以没有。
槽函数的访问权限三种: public slots、private slots和protected slots 槽函数的存取权限决定了谁能够与其相关联 头文件中中声明
Q_OBJECT......
public slots:
void myslot () ;
void myslot(int x);
void myslot(int x,int y);
当信号产生时,就会自动调用绑定的槽函数
绑定信号与槽:
connect(产生信号的对象指针(谁产生信号),信号,处理信号的对象指针(谁调用槽函数),槽函数)
//信号连接到槽
connect(stu,SIGNAL(slot_class_is_over()),tea, SLOT(signal_class_is_over()));
//一个信号连接到多个槽
connect(stu,SIGNAL(slot_class_is_over(QString)),tea, SLOT(signal_class_is_over())); connect(stu,SIGNAL(slot_class_is_over(QString)),tea,SLOT(signal_class_is_over(QString)));
connect(pb, &QPUshButton::clicked, [=](槽函数参数){
函数体
});
声明:类中的slots标签之下
定义:通常放在cpp中
*只声明不定义
类中需要添加O_OBJECT宏
声明:
signals标签之下进行声明
定义:
信号不需要定义
发射信号:
emit 信号();
emit 信号(参数1, 参数2, ....);
信号可以有参,当槽函数需要参数时由信号给它传递
槽函数的参数是由信号传递
槽函数的参数个数 <= 信号的参数个数
槽函数的参数类型与对应的信号的参数类型一致
1对1:一个信号对应一个槽函数
1对多:一个信号可以对应多个槽函数,当信号产生时所有绑定的槽函数按顺序执行
多对1:多个信号可以对应一个槽函数,只有其中任何一个信号产生都会调用一次这个槽函数
当pb1信号产生时,会自动触发pb2的信号。反之不会