2

我正在使用 QTableView 在我的应用程序中显示用户活动。

我的模型包含四列,每列显示不同类型的文本,例如:

  • 第一列中的用户名
  • 第二列中的用户活动
  • 第三栏活动详情

我想在单列中显示第二列和第三列的文本,并用“-”分隔不同的文本颜色。

我的应用程序目前看起来像这样:

在此处输入图像描述

但是,我希望它看起来与此类似

在此处输入图像描述

有人可以帮我解决这个问题吗,在此先感谢

4

2 回答 2

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();
}

如果有不清楚的地方,请随时询问。

于 2013-10-01T13:42:20.490 回答
1

我将分两步处理这个主题:

  1. 以这样的方式更改模型,即第 2 列和第 3 列是单列,但旧第 2 列的值作为Qt:DisplayRole(标准方式)返回,旧第 3 列的值返回Qt::SomeUserRole
  2. 将委托添加到表格视图,它将处理合并列的可视化并以“gmail”样式显示项目。使用上一步中的相应角色值从模型中获取可视化值。

您还可以将整个事物视为具有许多不同数据角色的列表:将每一行视为一个项目(这可以在 qml 中很好地处理)。

于 2013-10-01T13:31:51.823 回答