You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中如何使用QSS仅修改指定QMenu组件的右箭头图标

正确实现方案

你之前的写法不生效主要是两个错误:一是::right-arrow后多写了多余的冒号导致语法错误,二是动态设置自定义属性后没有触发Qt样式刷新,属性变更不会被样式选择器识别。可以选择以下任意一种方案实现需求:


方案1:使用objectName选择器(最稳妥,无需处理属性刷新)

  1. 给目标QMenu设置唯一objectName
menu->setObjectName("customArrowMenu");
  1. 在全局样式表或父控件样式表中添加对应规则即可
QMenu#customArrowMenu::right-arrow {
    image: url(icons:icon_name.svg);
}

方案2:使用自定义属性选择器

  1. 给目标QMenu设置自定义属性,设置完成后必须手动触发样式刷新
menu->setProperty("shouldHide", true);
// 必须添加下面两行触发样式重新计算,否则属性变更不会生效
menu->style()->unpolish(menu);
menu->style()->polish(menu);
  1. 样式表按如下格式编写(属性选择器需写在QMenu类型后,不要写在伪元素后缀后)
QMenu[shouldHide="true"]::right-arrow {
    image: url(icons:icon_name.svg);
}

方案3:直接给目标QMenu单独设置样式表

直接调用目标QMenu的setStyleSheet方法,不需要加类名前缀,注意去掉多余的冒号即可

menu->setStyleSheet("::right-arrow { image: url(icons:icon_name.svg); }");

内容的提问来源于stack exchange,提问作者Borislav-K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:06:01