gpt4 book ai didi

c++ - 更改委托(delegate)中的 QComboBox 项目文本

转载 作者:行者123 更新时间:2023-11-28 07:16:04 26 4
gpt4 key购买 nike

我想根据某些条件更改 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);
}

只是解释一下,在我的实际代码中,我有一些条件,所以我不想修改每个项。

但是,我不知道如何更改显示的文本。我尝试设置 newOptiontext 属性,但似乎与实际无关正在显示的文本。

此外,我需要在选择项目后立即将文本更改回其原始形式。

我发现 p_index.data().toString() 给我显示的文本,但这对我修改它没有帮助。我需要的是一种简单的方法来修改 QLabel 的文本属性(或 QComboBox 用来显示项目文本的任何内容),而不影响模型本身。

我知道会有变通办法,比如从组合框中删除我想要更改的项目并插入更改后的版本,但我希望有更简单的方法。

最佳答案

在您的模型之上添加代理模型并更改其 data() 方法对我来说似乎是最简单的解决方案。有 QIdentityProxyModel您可以简单地将其子类化并覆盖 data()。使用您的原始模型作为代理模型的来源,并将代理模型用作组合框的模型。

关于c++ - 更改委托(delegate)中的 QComboBox 项目文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com