我已经创建了一个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);
}
但这不起作用。
那么当选中工具按钮时,我该怎么做才能更改图标?
答案 0 :(得分:1)
您的方法存在两个问题:
您设置操作的对象名称。动作本身无法样式化。它已分配给按钮,并且其名称不会转移到此按钮(因为按钮可能已分配了多个操作)。因此,您的选择器#CoordinateType
无法使用,您将无法定位此特定按钮。
由于stylesheet reference的状态,无法使用 image 属性设置 QToolButton 的图标:
< / li>在子控件的内容矩形中绘制的图像。
如果要在按钮上设置图像,请改用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。