自定义QTreeView项目的复选框

时间:2012-03-22 17:12:44

标签: qt checkbox customization

我遇到以下情况:我需要创建一个自定义树控件,其复选框也是自定义的。我通过使用样式表轻松地为树控件进行了大部分自定义;我已经成功地为QTreeView的项目添加了复选框,但是我在定制它们时遇到了很大的问题 - 我需要为已检查状态显示自定义图像,为未选中状态显示另一个图像。

我得出结论的地方可以在我的子类QStyledItemDelegate中完成,在paint事件中(即CheckBoxItemDelegate :: paint)。我需要的是显示项目的文本,图标和复选框。但问题是:
- 我无法获得项目的样式(我使用样式表设置) - 否则我的文本可以用不正确的颜色绘制;
- 我不知道每个子项目(复选框,图标,文本)的内容;
- 我不知道如何获取项目的图标(给定其QModelIndex)来绘制它。

P.S。我已经将QTreeView(显然)子类化了,并且,当我使用QFileSystemModel时,我也将其子类化,以便为其添加复选框功能。

有人可以帮助我吗? QStyledItemDelegate ::绘制适当的位置来更改树项复选框的视觉效果吗?如果是的话,你能给我一个小例子,我怎么能这样做?

1 个答案:

答案 0 :(得分:7)

这就是我在QTreeView中使用两个图像(睁眼/闭眼,表示其可见性状态)而不是复选框来呈现可检查项目的方式:

ui.myTreeView->setStyleSheet(
    "QTreeView::indicator:unchecked {image: url(:/icons/eye_grey.png);}"
    "QTreeView::indicator:checked {image: url(:/icons/eye.png);}"
  );

当然,项目应设置为可检查。希望这会有所帮助。