zhibi2020 2023-09-19 14:44 采纳率: 0%
浏览 7

qmenu从有下级选项的选项切换到没有下级选项的选项后,会丢失选中状态,如何解决?(标签-List)

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///当菜单未显示时
    {



    }
}

img

如这个图片,当活动选项由222(有下级选项)切换到它上下的选项时,它上下的选项111和555都只会显示一下被选中时的样式并不能保持,在下面几个555之间切换都是可知正常保持选中的样式的,请问各位这个是什么原因?该怎么解决

补充:
这个是设置的样式表

QMenu::item:selected {
    background-image: url(:/image/side_menu/background/green1200.png);
    background-color: rgba(0, 0, 0, 0);
}

主要向知道为什么样式切换不正常

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-19 16:05
    关注

    【以下回答由 GPT 生成】

    这个问题出现的原因是QMenusetActiveAction函数只会改变当前活动的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
        {
            // 处理菜单未显示的情况
        }
    }
    

    以上代码示例中,我假设之前的活动选项有一个图标,并且将该图标设置为空来清空之前的活动选项的样式。然后为新选项设置一个活动图标,并将其设置为可选状态,以保持选中状态的样式。

    请注意,根据你的具体需求,你可能需要相应调整图标以及其他样式属性的设置。

    希望这个解决方案对你有帮助。如果你有任何问题或者需要进一步的帮助,请告诉我。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 9月21日
  • 创建了问题 9月19日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵