更改委托中的QComboBox项目文本
Change QComboBox item text in delegate
我想根据某些条件更改QComboBox
显示的项目的颜色和文本,但不更改模型本身的数据。
我想出了如何改变颜色,这很容易:
//---------------------------------------------------------------------------------
void
ComboPriorityDelegate::paint(QPainter* p_painter, const QStyleOptionViewItem& p_option, const QModelIndex& p_index) const
{
QStyleOptionViewItem newOption(p_option);
// Set the color
newOption.palette.setColor(QPalette::Text, QColor(255, 0, 0));
QItemDelegate::paint(p_painter, newOption, p_index);
}
只是为了解释一下,在我的实际代码中,我有一些条件,所以我不想修改每个项。
但是,我不知道如何更改显示的文本。我尝试设置newOption
的text
属性,但这似乎与显示的实际文本无关。
此外,一旦选择了项目,我需要将文本更改回其原始形式。
我发现p_index.data().toString()
给了我显示的文本,但这对我修改它没有帮助。我需要的是一种简单的方法来修改QLabel
的文本属性(或者QComboBox
用来显示项目文本的任何内容),而不会影响模型本身。
我知道会有一些变通办法,比如从组合框中删除我想更改的项目,然后插入一个更改后的版本,但我希望有一个更简单的方法。
在模型上添加代理模型并更改其data()
方法对我来说似乎是最简单的解决方案。有一个QIdentityProxy模型,您可以简单地将其子类化并覆盖data()
。使用原始模型作为代理模型的源,使用代理模型作为组合框的模型。
实际答案:我想做的事情似乎不可能仅仅使用委托。
解决方法:因此,我所做的是使用事件过滤器在下拉菜单打开之前为项目文本设置正确的后缀及其颜色(听MousePressed
事件)。
为了确保在选择项目时删除文本后缀,我在事件过滤器类中添加了一个插槽,该插槽必须连接到QComboBox
的activated()
信号。然后该插槽检查后缀并将其删除。
这不是一件好事,但至少它只需要一个额外的类和两行代码即可使用。它应该独立于所使用的数据模型。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何更改QComboBox项目的高度大小?
- 如何使用QTreeView在QComboBox中选择项目
- QCombobox,字符串旁边有项目的其他数据
- 在修改项目列表时,请防止可编辑的Qcombobox选择更改
- 使用QTREEVIEW中的Qcombobox委托项目
- Qcombobox设置标题文本,无论项目如何
- 向QComboBox-QT添加多个项目
- 可编辑的QComboBox:将编辑文本与项目文本同步
- 更改委托中的QComboBox项目文本
- Qt:如何在任意索引(不是当前选定的项目)处获取QComboBox项目文本
- QComboBox未正确呈现添加的项目
- 鼠标按下QComboBox的插槽-如果用户单击组合框,则动态填充项目
- QComboBox动态项目列表
- QComboBox 不显示其项目列表
- 如何在QComboBox项目中显示上标