选中/未选中时如何更改QToolBar上的QAction图标?

时间:2018-09-07 06:27:38

标签: c++ qt qt5 qtstylesheets qtoolbar

我已经创建了一个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);
}

但这不起作用。

那么当选中工具按钮时,我该怎么做才能更改图标?

1 个答案:

答案 0 :(得分:1)

原因

您的方法存在两个问题:

  1. 您设置操作的对象名称。动作本身无法样式化。它已分配给按钮,并且其名称不会转移到此按钮(因为按钮可能已分配了多个操作)。因此,您的选择器#CoordinateType无法使用,您将无法定位此特定按钮。

  2. 由于stylesheet reference的状态,无法使用 image 属性设置 QToolButton 的图标:

    < / li>
  

子控件的内容矩形中绘制的图像。

如果要在按钮上设置图像,请改用background-image。将以下qss设置为全局样式表可以在某种程度上起作用,但是同样,很难将 QToolBar 的特定按钮作为目标:

QToolButton {
    background-image: url(global.png);
}

QToolButton:checked {
    background-image: url(local.png);
}

解决方案

考虑到上述问题,我的解决方案是使用QIcon::State代替样式表。

示例

以下是如何更改代码以实现此目的的示例:

  1. 创建图标并进行设置

    QIcon icon;
    
    icon.addPixmap(QPixmap("global.png"), QIcon::Normal, QIcon::Off);
    icon.addPixmap(QPixmap("local.png"), QIcon::Normal, QIcon::On);
    
  2. 将图标设置为pAction的图标

    pAction->setIcon(icon);
    

注意:有可能,您也必须考虑其他modes