20.QT QPushButton 全部信号详解
QPushButton,所有按钮信号都继承自父类QAbstractButton,另外还继承QWidget、QObject的通用信号。
一、按钮核心业务信号(最常用,来自 QAbstractButton)
1.void clicked(bool checked = false)
- 触发:鼠标在按钮内按下+松开、快捷键触发、代码调用
click()/animateClick() - 参数:按钮设置
setCheckable(true)时,checked代表当前选中状态;普通按钮参数默认无意义
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::onClick);2.void pressed()
- 触发:鼠标左键刚按下按钮瞬间,还没松开就触发
- 适用场景:长按功能、按住持续执行操作(如拖动、连续加减数值)
connect(ui->pushButton, &QPushButton::pressed, this, &MainWindow::onPressed);3.void released()
- 触发:鼠标左键松开按钮时触发(无论按下后鼠标是否移出按钮区域)
- 适用场景:按住松手后收尾逻辑
4.void toggled(bool checked)
- 触发:仅可选中按钮(setCheckable(true))切换选中/取消状态时触发
- 和
clicked区别:clicked每次点击都会发;toggled只有状态真的改变才会发 - 参数
checked:true=选中,false=取消选中
ui->pushButton->setCheckable(true); // 开启可切换 connect(ui->pushButton, &QPushButton::toggled, this, &MainWindow::onToggle);二、继承自 QWidget 的通用界面信号(按钮也能用)
void customContextMenuRequested(const QPoint &pos)
右键点击按钮时触发,pos 是鼠标坐标,用于弹出右键菜单。void windowTitleChanged(const QString &title)
窗口标题变化(按钮自身无窗口,基本不用)void windowIconChanged(const QIcon &icon)- 鼠标/焦点类通用信号(所有控件都有):
void enterEvent()/void leaveEvent()鼠标移入/移出void focusInEvent()/focusOutEvent()获取/失去焦点
三、继承自 QObject 的生命周期信号
void destroyed(QObject *obj = nullptr)
按钮对象被销毁时触发,用于资源清理。
四、信号使用场景对比
信号 | 使用场景 |
clicked() | 绝大多数普通点击功能(弹窗、提交、跳转) |
pressed() | 长按连续操作、按下瞬间反馈 |
released() | 松手后执行逻辑 |
toggled() | 开关按钮、复选式按钮(开启/关闭功能) |
连接示例
// 按下瞬间 connect(ui->pushButton, &QPushButton::pressed, this, [=](){ qDebug() << "按钮被按住了"; }); // 松开 connect(ui->pushButton, &QPushButton::released, this, [=](){ qDebug() << "松开按钮"; }); // 开关按钮状态切换 ui->pushButton->setCheckable(true); connect(ui->pushButton, &QPushButton::toggled, this, [=](bool ck){ if(ck) qDebug() << "开启"; else qDebug() << "关闭"; });