QTableView显示的内容,如何将item中显示的同一行文字设置为多种颜色?

qq_30466317 2017-07-22 02:22:16
问题描述:QTableView中显示3列,内容都是文本,第3列的文本,同一行的文字要显示不同的颜色,例如“123456”,要求“12”显示红色,“34”显示绿色,“56”显示黄色

1. 先是用了setForeground(),但是这个函数会把显示的文本设置为一样的颜色,失败。
2. 在LineEdit上试验了html代码的方式,即:QLineEdit* tt = new QLineEdit("<font color=green>Qt!</font>");
这种加html代码的方式可以显示不同颜色,但是在QTableView中不行,会把html代码的内容一起显示出来,失败。
(比较奇怪QTableView显示的时候,单个控件到底是什么?)

难道要用委托来实现吗?

请大家帮忙提供思路,最好能有比较详细的描述,谢谢。
...全文
601 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30466317 2017-08-02
  • 打赏
  • 举报
回复
在stackoverflow找到一个相关的问题,虽然可以实现,但是觉得代码不好且实现的效果也不太理想,先这样吧,放着给需要的人参考: https://stackoverflow.com/questions/1956542/how-to-make-item-view-render-rich-html-text-in-qt 中文版的: http://blog.csdn.net/liang19890820/article/details/50973099 想了一下最简单的办法就是用通过委托用qlabel来显示qtableview的某列数据就可以了,但是整来整去就是不行,郁闷。 结贴了。
DC_Sea 2017-07-24
  • 打赏
  • 举报
回复
重写 paintevent 应该可以实现
qq_30466317 2017-07-24
  • 打赏
  • 举报
回复
回楼上: 自定义一个委托LabelDelegate,继承自QStyledItemDelegate,重写paint(): void LabelDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if(index.column() == 2) { QString text = index.model()->data(index, Qt::DisplayRole).toString(); QStyleOptionViewItem myOption = option; myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter; QApplication::style()->drawItemText(painter, myOption.rect, myOption.displayAlignment, QApplication::palette(), true, text); } else { QStyledItemDelegate::paint(painter, option, index); } } 结果:没用。假设第3列的值是"column 3<font color=green>Qt</font>",希望"column 3"显示为黑色,"Qt"显示为绿色,但是实际显示的内容变成:column 3<font color=green>Qt</font>

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧