c++ - 选中/取消选中时如何更改 QToolBar 上的 QAction 图标?
问题描述
我创建了一个QToolBar
:
QToolBar* pQToolbar = new QToolBar();
QAction* pAction = pQToolbar->addAction("CoordinateType");
pAction->setObjectName("CoordinateType");
pAction->setIcon(QIcon("global.png"));
pAction->setCheckable(true);
然后我在样式表中检查时尝试设置图标:
#CoordinateType {
image: url(global.png);
}
#CoordinateType:checked {
image: url(local.png);
}
但它不起作用。
那么当工具按钮被选中时,我应该怎么做才能改变图标呢?
解决方案
原因
您的方法存在几个问题:
您设置操作的对象名称。动作本身是不可样式化的。它被分配给一个按钮,并且它的名称不会传递给这个按钮(因为一个按钮可能有几个分配给它的动作)。因此,您的选择器
#CoordinateType
将不起作用,您将无法定位此特定按钮。无法使用image属性设置QToolButton的图标,因为样式表引用指出:
在子控件的内容矩形中绘制的图像。
如果要在按钮上设置图像,请background-image
改用。将以下 qss 设置为全局样式表在某种程度上是可行的,但同样难以定位QToolBar的特定按钮:
QToolButton {
background-image: url(global.png);
}
QToolButton:checked {
background-image: url(local.png);
}
解决方案
考虑到上述问题,我的解决方案是使用QIcon::State而不是样式表。
例子
以下是如何更改代码以实现此目的的示例:
创建一个图标并设置它
QIcon icon; icon.addPixmap(QPixmap("global.png"), QIcon::Normal, QIcon::Off); icon.addPixmap(QPixmap("local.png"), QIcon::Normal, QIcon::On);
将图标设置为
pAction
的图标pAction->setIcon(icon);
注意:有可能,您也必须考虑其他模式。
推荐阅读
- python - 如何修复 django 中的 OSError(无效参数)错误
- laravel - laravel 向我显示此错误此路线不支持 POST 方法。支持的方法:GET、HEAD、PUT、DELETE
- python-3.x - 行长为奇数的等角三角形
- c# - 单独的 getter 和 setter 声明
- sql - 执行我的语句时无法绑定多部分标识符
- keras - Keras 仅预测 3 类中的一类
- c# - 有没有办法检查是否写了一些东西,除非等到用“Console.ReadLine()”写一些东西
- c++ - 为什么ffmpeg cmake外部项目不起作用
- rust - 在文档中将长表格行分成多行
- jquery - 如何通过 Jquery 脚本设置 HTML 参数?