如何取消选中Qt上操作组菜单上的所有操作?
我有一个方法可以自动在菜单上添加可检查的操作,它工作得很好。我只是想知道如何自动取消所有这些操作。我知道可以使用如何取消选中Qt上操作组菜单上的所有操作?,qt,menu,qactiongroup,Qt,Menu,Qactiongroup,我有一个方法可以自动在菜单上添加可检查的操作,它工作得很好。我只是想知道如何自动取消所有这些操作。我知道可以使用ui->action\u item->setChecked(false),但在这种情况下,我应该知道并在代码中写入每个操作名称,但这对我来说是不可行的 伪代码: void MainWindow::AddNewActions() { QActionGroup *my_action_group = new QActionGroup(this); my_action_grou
ui->action\u item->setChecked(false)
,但在这种情况下,我应该知道并在代码中写入每个操作名称,但这对我来说是不可行的
伪代码:
void MainWindow::AddNewActions() {
QActionGroup *my_action_group = new QActionGroup(this);
my_action_group->setExclusive(true);
foreach (..) {
QAction *my_new_action = new QAction(description, my_action_group);
my_new_action->setCheckable(true);
my_new_action->setData(action_name);
ui_->my_menu->addAction(my_new_action);
}
}
您需要获取操作列表,然后取消选中每个操作。操作列表只是菜单的
QAction
子项列表,但如果它们不属于某个操作组,则是如此。那就是:
void Class::method2() {
auto actions = std::as_const(ui_->my_menu->findChildren<QAction*>());
for (auto *action : actions)
action->setChecked(false);
}
void类::method2(){
自动操作=std::as_const(用户界面->我的菜单->findChildren());
用于(自动*动作:动作)
操作->设置检查(假);
}
如果要在特定操作组中查找操作,则需要使用唯一名称命名该操作组,以便以后参考:
static const QString k_my_action_group{QLatin1String("my_action_group")};
void Class::method1() {
auto *my_action_group = new QActionGroup{this};
my_action_group->setObjectName(k_my_action_group);
...
}
void Class::method2() {
if (auto *group = findChild<QActionGroup*>(k_my_action_group))
if (auto *action = group->checkedAction())
action->setChecked(false);
}
static const QString k_my_action_group{QLatin1String(“my_action_group”);
void类::method1(){
auto*my_action_group=新QActionGroup{this};
my_action_group->setObjectName(k_my_action_group);
...
}
void类::method2(){
if(auto*group=findChild(k_my_action_group))
如果(自动*action=group->checkedAction())
操作->设置检查(假);
}
如果您有多个组,它们可以共享相同的名称,然后您也可以迭代它们:
void Class::method2() { // if somehow more than one action can be checked
auto groups = std::as_const(findChildren<QActionGroup*>(k_my_action_group));
for (auto *group : groups)
if (auto *action = group->checkedAction())
action->setChecked(false);
}
void Class::method2(){//如果可以检查多个操作
自动组=std::as_const(findChildren(k_my_action_group));
用于(自动*组:组)
如果(自动*action=group->checkedAction())
操作->设置检查(假);
}
如果编译器尚未实现std::as_const,请改用qAsConst
。const casting是Qt容器隐式共享设计的不幸结果
在多个位置引用的对象名称应用作具有符号名称的字符串常量。这使得在编译时可以检测到输入错误,而不是在运行时。我实现了一个最简单的解决方案:
QList<QMenu*> menus;
menus = ui->menuBar->findChildren<QMenu*>();
foreach (QMenu* menu, menus)
{
foreach (QAction* action, menu->actions())
{
if(action->isCheckable()){
action->setChecked(false);
}
}
}
QList菜单;
菜单=ui->menuBar->findChildren();
foreach(QMenu*菜单,菜单)
{
foreach(QAction*操作,菜单->操作()
{
如果(操作->可检查(){
操作->设置检查(假);
}
}
}
什么是ui->action\u项目
?除了提供