一、基础概念
QWidget
继承 QObject,所有窗口控件的基类。凡是看得见的界面组件都是 QWidget。
窗口:独立弹窗(setWindowFlags)
子控件:嵌入在其他窗口内部的组件。
二、Qt 项目结构(Qt Widget)
新建 Qt Widget Application,自动生成 4 个核心文件:
- main.cpp:程序入口
cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //应用程序对象,必须有且仅有一个
MainWindow w;
w.show(); //显示窗口
return a.exec(); //启动事件循环,等待鼠标、按钮等事件
}
- mainwindow.h:窗口头文件
- mainwindow.cpp:窗口实现
- mainwindow.ui:UI 设计师界面文件
三、核心:信号与槽 Signal & Slot
对象之间解耦通信机制,Qt 灵魂。
signal 信号:事件发生发出通知,只有声明没有实现,emit发射
slot 槽:响应信号的函数,可以普通成员函数、lambda
connect 连接:绑定信号和槽
cpp
//Qt5函数指针写法(推荐,编译检查)
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::slotFunc);
//Lambda匿名槽,简单逻辑首选
connect(ui->pushButton,&QPushButton::clicked,this,[=](){
ui->label->setText("点击了");
});
参数规则:信号参数 >= 槽参数,参数类型必须对应。
第五个参数:连接类型,跨线程必须用Qt::QueuedConnection。
四、基础控件(QWidget 体系)
- 显示控件
QLabel:显示文字、图片、GIF
QPushButton:普通按钮
QRadioButton:单选框;QCheckBox复选框
QToolButton:工具栏图标按钮 - 输入控件
QLineEdit:单行输入框,密码输入
QTextEdit:多行富文本;QPlainTextEdit纯文本日志
QComboBox下拉选择框
QSpinBox/QDoubleSpinBox数字输入
QSlider滑动条;QProgressBar进度条 - 容器控件(装其他控件)
QGroupBox分组框
QTabWidget标签分页
QStackedWidget堆叠页面,同一位置切换界面
QScrollArea滚动区域,内容超出出现滚动条