我创建了一个自定义模型,视图(树)和委托,一切似乎都工作正常,只有一个小问题。树的一些单元格是组合框。当用户选择时,组合框按预期工作(自定义createEditor,setEditorData和setModelData委托方法)。我遇到的问题是仅在选择单元格时才会显示向下箭头。我希望始终显示向下箭头。
我不确定哪种方法是控制向下箭头的显示。它是来自模型数据(可能是decorationrole)还是委托的paint方法。注意我没有使用任何样式表。
更新:
找到了我在here之后的解决方案。基本上在我的自定义委托的paint方法中结束了以下内容。
QStyleOptionComboBox comboBoxOption;
comboBoxOption.rect = option.rect;
comboBoxOption.state = option.state;
comboBoxOption.state |= QStyle::State_Enabled;
comboBoxOption.editable = false;
comboBoxOption.currentText = index.data(Qt::DisplayRole).toString();
QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &comboBoxOption, painter);
QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxOption, painter);
当QTreeItemView显示自己的项目时。它使用QStyledItemDelegate来显示内容。编辑单元格时,创建真正的QCombobox小部件。因此,编辑和显示项目有不同的方法。您应该更改QStyledItemDelegate :: paint逻辑,以便在单元格显示(绘画)时查看其他装饰。生成QStyledItemDelegate的子项并定义自己的paint()方法。这不是第一次简单。但这是在细胞中实施“箭头”的真正方式。