简 述: 解释如下几个信号的区别

  • QAbstractButton:①clicked ② pressed ③ released ④ toggled
  • QToolButton:① triggered
  • QAction:① changed ② hovered ③ toggled ④ triggered

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


大纲

QAbstractButton / QToolButton / QAction 的信号差异

信号
QAbstractButton void clicked(bool checked = false)
QAbstractButton void pressed()
QAbstractButton void released()
QAbstractButton void toggled(bool checked)
QToolButton void triggered(QAction *action)
QAction void changed()
QAction void hovered()
QAction void toggled(bool checked)
QAction void triggered(bool checked = false)

QAbstractButton 的四个信号

  • clicked(bool checked):鼠标松开时触发。如果鼠标拖拽到按钮区域之外释放则不会触发。对应的函数是 *mouseReleaseEvent()*。一般情况下 connect 槽函数时使用该信号。

  • pressed(): 鼠标按下时,发射信号。对应 mousePressEvent()

  • released():鼠标松开时,发射信号。即使鼠标拖拽到按钮区域之外释放也会触发。对应 mouseReleaseEvent()

  • toggled(bool checked):设置 setCheckable(true) 后再单击按钮才会触发该信号


正常情况下单击按钮,响应顺序为:pressed() — about 215ms — released() — almost 0ms — *clicked()*。


QToolButton 的一个信号

  • triggered(QAction *action):给定的 QAction 被触发时,发射信号

QAction 的四个信号

  • changed():action 发生改变时,发射信号
  • hovered():光标一移动到该 item 的范围中,一覆盖在上面即会触发此信号。
  • toggled(bool checked):设置 setCheckable(true) 后再单击按钮才会触发该信号。
    1. eg:checkable 被修改状态(勾选☑、或未勾选⬜),都会触发此信号。当使用函数 setChecked() 时,同样会触发此信号。
    2. 实测在 QSystemTrayIcon 的 menu 中添加 QAction;使用此 toggled 信号,但是却不会被触发对应槽函数?甚是奇怪。已改用 triggered 来代替完成功能。
  • triggered(bool checked):点击 菜单栏、 toolbar按钮、或者action 的快捷键,都可以触发此信号。但是如果调用 setChecked()toggle() 等函数,则不会触发。

系列地址

QtExamples

欢迎 star ⭐ 和 fork 🍴 这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费!”