Qt怎么知道点的菜单选项是属于哪个button的?
时间: 2024-02-05 10:12:10 浏览: 91
在Qt中,可以使用QMenu的`sender()`方法来获取发送信号的对象,然后通过比较该对象和所有Button对象,以确定是哪个Button发送了信号。
具体步骤如下:
1. 在创建菜单时,将QAction的`setObjectName()`方法设置为唯一的标识符,例如:
```cpp
QAction *action = new QAction("Open", this);
action->setObjectName("openAction");
```
2. 在连接信号和槽时,将菜单的`triggered()`信号连接到一个槽函数,例如:
```cpp
connect(menu, &QMenu::triggered, this, &MyWidget::menuTriggered);
```
3. 在槽函数中,使用`sender()`方法获取发送信号的对象,并比较其`objectName()`和所有Button对象的`objectName()`,以确定是哪个Button发送的信号,例如:
```cpp
void MyWidget::menuTriggered(QAction *action)
{
QObject *senderObj = sender();
if (senderObj == button1 && action->objectName() == "openAction") {
// do something for button1 and openAction
} else if (senderObj == button2 && action->objectName() == "openAction") {
// do something for button2 and openAction
}
}
```
其中,`button1`和`button2`代表两个Button对象。
阅读全文