qmenu从有下级选项的选项切换到没有下级选项的选项后,会丢失选中状态
代码如下
void MainWindow::handleUpKeyPressShort()///上键短按
{
if(sideMenuState == true)///当菜单显示时
{
QList<QAction*> actions = sideMenuNow->actions();///获取当前菜单下的所有选项
{
if (actions.count() > 1)///当前菜单下选项>1
{
/// 取消当前选项的活动状态
sideMenuNow->setActiveAction(nullptr);
if((sideActionNowNumLv[sideMenuNowLv] - 1) < 0)
{
sideActionNowNumLv[sideMenuNowLv] = actions.count() - 1;
}
else
{
sideActionNowNumLv[sideMenuNowLv] -= 1;
}
sideMenuNow->setActiveAction(actions[sideActionNowNumLv[sideMenuNowLv]]);
}
}
}
else///当菜单未显示时
{
}
}
如这个图片,当活动选项由222(有下级选项)切换到它上下的选项时,它上下的选项111和555都只会显示一下被选中时的样式并不能保持,在下面几个555之间切换都是可知正常保持选中的样式的,请问各位这个是什么原因?该怎么解决
【以下回答由 GPT 生成】
这个问题出现的原因是QMenu
的setActiveAction
函数只会改变当前活动的QAction
的样式,而不会改变之前活动的QAction
的样式。所以当从有下级选项的选项切换到没有下级选项的选项时,之前的活动选项的样式不会被保持。
解决这个问题的方法是,在切换到新的选项时,手动设置之前的活动选项的样式为空,同时设置新选项为活动选项。
这里是修改后的代码示例:
void MainWindow::handleUpKeyPressShort()
{
if (sideMenuState == true)
{
QList<QAction*> actions = sideMenuNow->actions();
if (actions.count() > 1)
{
QAction* prevActive = sideMenuNow->activeAction(); // 获取之前的活动选项
sideMenuNow->setActiveAction(nullptr); // 取消当前选项的活动状态
if ((sideActionNowNumLv[sideMenuNowLv] - 1) < 0)
{
sideActionNowNumLv[sideMenuNowLv] = actions.count() - 1;
}
else
{
sideActionNowNumLv[sideMenuNowLv] -= 1;
}
QAction* newActive = actions[sideActionNowNumLv[sideMenuNowLv]]; // 获取新选项
sideMenuNow->setActiveAction(newActive); // 设置新选项为活动选项
if (prevActive != nullptr) {
prevActive->setIcon(QIcon()); // 清空之前活动选项的图标
prevActive->setCheckable(false); // 取消之前活动选项的可选状态
}
newActive->setIcon(QIcon(":/icons/active.png")); // 设置新选项的图标
newActive->setCheckable(true); // 设置新选项为可选状态
}
}
else
{
// 处理菜单未显示的情况
}
}
以上代码示例中,我假设之前的活动选项有一个图标,并且将该图标设置为空来清空之前的活动选项的样式。然后为新选项设置一个活动图标,并将其设置为可选状态,以保持选中状态的样式。
请注意,根据你的具体需求,你可能需要相应调整图标以及其他样式属性的设置。
希望这个解决方案对你有帮助。如果你有任何问题或者需要进一步的帮助,请告诉我。
可能是对List控件的理解不同,通常activate的解释是当前条目,或者激活显示,与选择无关。选择项通常使用类似于check或者selected这样的标记,而且有参数控制单选和多重选择。