C++ Qt复选框/工具按钮,带有自定义/不同的复选/未选中图标

C++ Qt复选框/工具按钮,带有自定义/不同的复选/未选中图标,c++,qt,C++,Qt,我需要有一个类似复选框的控件,其中选中和未选中的状态使用自定义图形。我已经查看了QToolButton和QCheckBox以及QIcon的所有文档,但找不到任何符合我要求的组合 我只想在未选中状态下使用一个图标(实际上是pixmap),在选中状态下使用另一个图标 这感觉应该很容易,但解决方案(缺少自定义控件)让我难以理解 我也尝试过使用样式表,并且用背景图像选中了QToolButton:,但我无法获得正确的布局--它的位置/大小与图标不同。使用::指示器子项。下面的代码非常适合我 QChec

我需要有一个类似复选框的控件,其中选中和未选中的状态使用自定义图形。我已经查看了QToolButton和QCheckBox以及QIcon的所有文档,但找不到任何符合我要求的组合

我只想在未选中状态下使用一个图标(实际上是pixmap),在选中状态下使用另一个图标

这感觉应该很容易,但解决方案(缺少自定义控件)让我难以理解



我也尝试过使用样式表,并且用背景图像选中了
QToolButton:
,但我无法获得正确的布局--它的位置/大小与图标不同。

使用::指示器子项。下面的代码非常适合我

 QCheckBox::indicator {
     width: 18px;
     height: 18px;
 }

  QCheckBox::indicator:checked
  {
    image: url(.../Checkbox_checked_normal.png);
  }
  QCheckBox::indicator:unchecked
  {
    image: url(.../Checkbox_unchecked_normal.png);
  }

  QCheckBox::indicator:checked:hover
  {
    image: url(.../Checkbox_checked_hovered.png);
  }
  QCheckBox::indicator:unchecked:hover
  {
    image: url(.../Checkbox_unchecked_hovered.png);
  }
  QCheckBox::indicator:checked:pressed
  {
    image: url(.../Checkbox_checked_pressed.png);
  }
  QCheckBox::indicator:unchecked:pressed
  {
    image: url(.../Checkbox_unchecked_pressed.png);
  }
  QCheckBox::indicator:checked:disabled
  {
    image: url(.../Checkbox_checked_disabled.png);
  }
  QCheckBox::indicator:unchecked:disabled
  {
    image: url(.../Checkbox_unchecked_disabled.png);
  }

这必须作为样式表输入。通过设计编辑器右键单击复选框并选择“更改样式表…”来完成此操作。

谢谢您的帮助! 为了在Maya中使用,我使用了:

from PySide2 import QtWidgets
import os
ICON = os.path.join(os.path.dirname(__file__), '_icons//').replace("\\", "//")

ui.setStyleSheet("""
QGroupBox::indicator {width: 14px; height: 14px;}
QGroupBox::indicator:checked {image: url(""" + ICON + """arrow_down.png);}
QGroupBox::indicator:Unchecked {image: url(""" + ICON + """arrow_right.png);}
QGroupBox::indicator:checked:hover {image: url(""" + ICON + """arrow_down_hover.png);}
QGroupBox::indicator:Unchecked:hover {image: url(""" + ICON + """arrow_right_hover.png);}
""")

将后斜杠替换为前斜杠非常重要,因为如果路径不以这种方式统一,图像将不会显示。

您还可以将图标作为资源包括并使用:

QCheckBox::指示符:选中{image:url(:/circle green.png);}
QCheckBox::指示符:未选中{image:url(:/circle red.png);}

有没有办法使用Qt图标而不是在资源中导入图像?