如何在 checked/unchecked 时更改 QToolBar 上 QAction 的图标?
How to change the icon of a QAction on a QToolBar when checked/unchecked?
我创建了一个 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 的图标,正如 stylesheet reference 所述:
The image that is drawn in the contents rectangle of a subcontrol.
如果要在按钮上设置图像,请改用 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);
注:有可能,你还得考虑另一个modes。
我创建了一个 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 的图标,正如 stylesheet reference 所述:
The image that is drawn in the contents rectangle of a subcontrol.
如果要在按钮上设置图像,请改用 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);
注:有可能,你还得考虑另一个modes。