我正在使用QTableView在我的应用程序中显示用户活动。
我的模型包含四列,每列显示不同类型的文本,如:
我想在单个列中显示第2列和第3列的文本,其中不同的文本颜色用“ - ”分隔。
我的应用目前看起来像这样:
但是,我希望它看起来与此类似
有人可以帮我解决这个问题,提前谢谢
答案 0 :(得分:1)
我会分两个步骤来讨论这个话题:
Qt:DisplayRole
(标准方式)返回,并且Qt::SomeUserRole
<返回旧第3列的值/ LI>
您还可以将整个事物视为具有许多不同数据角色的列表:每行作为单个项目(这可以在qml中非常好地处理)。
答案 1 :(得分:1)
您可以覆盖模型的data
方法,并使用Qt::ForegroundRole
返回自定义颜色以获取必要的列。
但如果您喜欢“gmail”可视化 - 那么您应该创建自己的代理(由@Marek提议)。您可以使用QTextDocument
进行高级文本呈现。伪代码:
void QStyledItemDelegate::paint( QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
painter->save();
const QString title = index.model()->data( YourTitleRoleId ).toString();
const QString content = index.model()->data( YourContentRoleId ).toString();
// Use any qt-supported html tags
const QString html = QString( "<html><b>%1</b> - <i>%2</i></html>" ).arg( title ).arg( content );
QTextDocument doc;
doc.setHtml( html );
QRectF rc( option.rect );
doc.drawContents( painter, rc );
painter->restore();
}
如果不清楚,请随意询问。