在Qt中,clicked
和 triggered
是两个常用的信号,它们在不同的控件中有不同的用途和特点,下面为你详细介绍。
1. clicked
信号
适用控件
clicked
信号主要用于与用户交互的按钮类控件,例如 QPushButton
、QToolButton
等。当用户点击这些按钮时,会发射 clicked
信号。
信号特点
- 只在用户交互时触发:只有当用户实际点击按钮时才会发射该信号。通过代码调用按钮的点击动作(如
button->click()
)也会触发此信号。 - 无额外参数:
clicked
信号通常没有额外的参数,或者在某些情况下有一个布尔类型的参数(用于表示按钮是否被选中,适用于可选中的按钮)。
示例代码
#include <QApplication>
#include <QPushButton>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
QPushButton button("Click me", &window);
QObject::connect(&button, &QPushButton::clicked, [&]() {
qDebug() << "Button clicked!";
});
window.show();
return app.exec();
}
在上述代码中,当用户点击 QPushButton
时,会输出 "Button clicked!"
。
2. triggered
信号
适用控件
triggered
信号主要用于菜单项(QAction
)和工具栏项(通常与 QAction
关联)。QAction
是一种抽象的用户操作,它可以被关联到菜单、工具栏等不同的界面元素上。
信号特点
- 多种触发方式:
triggered
信号可以通过多种方式触发,例如用户点击菜单项、按下快捷键、通过代码调用action->trigger()
等。 - 可能携带额外参数:如果
QAction
是可选中的(setCheckable(true)
),triggered
信号会携带一个布尔类型的参数,表示动作是否被选中。
示例代码
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow window;
QMenuBar *menuBar = window.menuBar();
QMenu *fileMenu = menuBar->addMenu("File");
QAction *openAction = new QAction("Open", &window);
fileMenu->addAction(openAction);
QObject::connect(openAction, &QAction::triggered, [&]() {
qDebug() << "Open action triggered!";
});
window.show();
return app.exec();
}
在上述代码中,当用户点击 “File” 菜单中的 “Open” 菜单项时,会输出 "Open action triggered!"
。
总结
clicked
信号主要用于按钮类控件,与用户的点击操作紧密相关。triggered
信号主要用于QAction
,适用于菜单项和工具栏项,触发方式更加多样化。