Qt多次调用同一个槽函数新建按钮和按钮对应菜单,怎么让这些按钮和菜单相互独立
时间: 2024-02-09 15:09:37 浏览: 93
可以通过在创建按钮和菜单时,为每个按钮和菜单分配一个唯一的对象名称来实现相互独立。这样,每个按钮和菜单就可以单独处理它们的信号和槽函数,而不会相互影响。
例如,可以在创建按钮和菜单时,使用如下代码为它们分配一个唯一的对象名称:
```c++
QPushButton *btn = new QPushButton(parent);
btn->setObjectName("Button1");
connect(btn, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
QMenu *menu = new QMenu(parent);
menu->setObjectName("Menu1");
menu->addAction("Action1");
connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(onMenuTriggered(QAction*)));
```
然后在槽函数中,可以使用QObject::sender()函数获取发送信号的对象,并根据对象名称判断是哪个按钮或菜单发出的信号,从而实现它们之间的独立处理。
例如:
```c++
void MainWindow::onButtonClicked()
{
QObject* obj = QObject::sender();
QString objName = obj->objectName();
if (objName == "Button1")
{
// 处理Button1的点击事件
}
else if (objName == "Button2")
{
// 处理Button2的点击事件
}
// ...
}
void MainWindow::onMenuTriggered(QAction *action)
{
QObject* obj = QObject::sender();
QString objName = obj->objectName();
if (objName == "Menu1")
{
if (action->text() == "Action1")
{
// 处理Menu1的Action1事件
}
else if (action->text() == "Action2")
{
// 处理Menu1的Action2事件
}
// ...
}
else if (objName == "Menu2")
{
// 处理Menu2的事件
}
// ...
}
```
这样,就可以让多个按钮和菜单相互独立,分别处理它们自己的事件了。
阅读全文