20.QT QPushButton 全部信号详解

QPushButton,所有按钮信号都继承自父类QAbstractButton,另外还继承QWidgetQObject的通用信号。

一、按钮核心业务信号(最常用,来自 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 的通用界面信号(按钮也能用)

  1. void customContextMenuRequested(const QPoint &pos)
    右键点击按钮时触发,pos 是鼠标坐标,用于弹出右键菜单。
  2. void windowTitleChanged(const QString &title)
    窗口标题变化(按钮自身无窗口,基本不用)
  3. void windowIconChanged(const QIcon &icon)
  4. 鼠标/焦点类通用信号(所有控件都有):
    • 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() << "关闭"; });