Qt中如何使用QSS仅修改指定QMenu组件的右箭头图标
正确实现方案
你之前的写法不生效主要是两个错误:一是::right-arrow后多写了多余的冒号导致语法错误,二是动态设置自定义属性后没有触发Qt样式刷新,属性变更不会被样式选择器识别。可以选择以下任意一种方案实现需求:
方案1:使用objectName选择器(最稳妥,无需处理属性刷新)
- 给目标QMenu设置唯一objectName
menu->setObjectName("customArrowMenu");
- 在全局样式表或父控件样式表中添加对应规则即可
QMenu#customArrowMenu::right-arrow { image: url(icons:icon_name.svg); }
方案2:使用自定义属性选择器
- 给目标QMenu设置自定义属性,设置完成后必须手动触发样式刷新
menu->setProperty("shouldHide", true); // 必须添加下面两行触发样式重新计算,否则属性变更不会生效 menu->style()->unpolish(menu); menu->style()->polish(menu);
- 样式表按如下格式编写(属性选择器需写在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
相关产品推荐
相关产品推荐

