QMainWindow和QWidget的区别
Qt 中所有可视化的元素都称为控件
QWidget下为 #include “ui_widget.h”
QMainWindow下为 #include “ui_mainwindow.h”
QMainWindow中在setUi时自动为用户创建了一个菜单栏、工具栏、中心窗口和状态栏。而QWidget是没有这几点的。
QWidget运行后就只有一个“页面”,而QMainWindow运行后生成了一个“窗口”。
setMenuBar、addToolBar、setCentralWidget、setStatusBar几种行为只有QMainWindow类具有。在继承自QWidget类的用户类中无法创建菜单栏等几种行为。
QMainWindow和QDialog的区别
- QMainWindow 类生成的窗口自带菜单栏、工具栏和状态栏,中央区域还可以添加多个控件,常用来作为应用程序的主窗口;
- QDialog 类生成的窗口非常简单,没有菜单栏、工具栏和状态栏,但可以添加多个控件,常用来制作对话框。
注意:制作应用程序的主窗口可以用 QMainWindow 或者 QWidget;制作一个提示信息的对话框就用 QDialog 或 QWidget;如果暂时无法决定,后续可能作为窗口,也可能作为控件,就选择 QWidget。
信号和槽
信号和槽机制底层是通过函数间的相互调用实现的。
每个信号都可以用函数来表示,称为信号函数;每个槽也可以用函数表示,称为槽函数。例如“按钮被按下”这个信号可以用 clicked() 函数表示,“窗口关闭”这个槽可以用 close() 函数表示
槽函数:public slots、protected slots 或者 private slots 修饰。信号函数用 signals 关键字修饰
信号函数只需要声明,而槽函数需要定义(实现)
将某个信号函数和某个槽函数关联起来,需要借助 QObject 类提供的 connect() 函数。
connect()函数:
QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
- sender:指定信号的发送者;
- signal:指定信号函数,信号函数必须用 SIGNAL() 宏括起来;
- reveiver:指定信号的接收者;
- method:指定接收信号的槽函数,槽函数必须用 SLOT() 宏括起来;
- type 用于指定关联方式,默认的关联方式为 Qt::AutoConnection,通常不需要手动设定。
- connect(&But, &QPushButton::clicked, &widget, &QWidget::close); 新版用法
QLabel 文本框
QPushButton(普通按钮)、QRadioButton(单选按钮)、QToolButton(工具栏按钮)
QLineEdit单行输入框(输入文本的格式,例如用户输入出生日期时,必须按照“yy-mm-dd”的格式输入;)
QTableWidget 表格控件
QTreeWidget 树形控件,树形结构展示数据(或者文件)之间的包含关系。
QMessageBox消息框
5 种布局管理器,每种布局管理器对应一个类,分别是 QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)、QFormLayout(表单布局)和 QStackedLayout(分组布局)
.pro->项目管理文件或者工程管理文件
QT += core gui
中,Qt
是配置项,core
和gui
是该配置项的值,中间用+=
符号连接
自定义信号函数:
- 定义在某个类中,该类直接或间接继承自 QObject 类;
- 用 signals 关键字修饰;
- 函数只需要声明,不需要定义(实现);
- 函数的返回值类型为 void,参数的类型和个数不限。
自定义槽函数:必须手动定义(实现)
- 槽函数的返回值必须和信号函数相同,由于信号函数的返回值一定是 void,所以槽函数的返回值也必须为 void;
- 对于带参的信号函数,槽函数可以选择接收所有参数,则参数的类型、顺序、个数都必须与信号函数相同;也可以选择接收前几个参数,这些参数的类型、顺序都必须与信号函数相同;还可以选择不接受任何参数。
- 槽函数的参数个数只能比信号函数少,不能比信号函数多;
- 槽函数的参数不能有默认值。
Lambda表达式
[函数对象参数](操作符重载函数参数)mutable或exception ->返回值{函数体}
例如:[=]()mutable exception - >int
- 空,没有任何函数对象参数
- =,值传递方式(作用范围:所有可见的局部变量以及所在类的this)
- &,引用传递方式(作用范围:所有可见的局部变量以及所在类的this)
- this,函数体内可以可以使用Lambda所在类中的成员变量
- a,把a按值进行传递(默认为const不可修改,可添加mutable修饰符修改)
- &b,把b按引用进行传递
- &,a,b,除a和b进行值传递,其他参数按引用进行传递
QNetworkAccessManager
处理返回来的数据:
reply1 = manager->get(QNetworkRequest(url_1));
reply2 = manager->get(QNetworkRequest(url_2));
connect(reply1,SIGNAL(finished()),this,SLOT(httpFinished_1()));
connect(reply2,SIGNAL(finished()),this,SLOT(httpFinished_2()));
post数据:
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(after_post(QNetworkReply*)));
disconnect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(after_post(QNetworkReply*)));
基于Qt应用开发的商场广告导航结合眼球跟踪技术等交互技术,以下是Qt应用商场导航部分页面: