我正在使用 QTableView 在我的应用程序中显示用户活动。
我的模型包含四列,每列显示不同类型的文本,例如:
- 第一列中的用户名
- 第二列中的用户活动
- 第三栏活动详情
我想在单列中显示第二列和第三列的文本,并用“-”分隔不同的文本颜色。
我的应用程序目前看起来像这样:
但是,我希望它看起来与此类似
有人可以帮我解决这个问题吗,在此先感谢
我正在使用 QTableView 在我的应用程序中显示用户活动。
我的模型包含四列,每列显示不同类型的文本,例如:
我想在单列中显示第二列和第三列的文本,并用“-”分隔不同的文本颜色。
我的应用程序目前看起来像这样:
但是,我希望它看起来与此类似
有人可以帮我解决这个问题吗,在此先感谢
您可以覆盖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();
}
如果有不清楚的地方,请随时询问。
我将分两步处理这个主题:
Qt:DisplayRole
(标准方式)返回,旧第 3 列的值返回Qt::SomeUserRole
您还可以将整个事物视为具有许多不同数据角色的列表:将每一行视为一个项目(这可以在 qml 中很好地处理)。