【问题标题】:QTableView format individual row and columnsQTableView 格式化单个行和列
【发布时间】:2017-07-27 16:49:44
【问题描述】:

也许我要问的问题太基本了,以至于我在某个地方错过了它,但是我用谷歌搜索了各种各样的东西,但我一直无法找到答案。我有以下表格视图,来自 SQLite 表格:

  body = new QSqlTableModel(parent,data->m_db);
  body->setTable("C"+QString::number(markTime.toSecsSinceEpoch()));
  body->select();
  ui->bodyView->setModel(body);
  ui->bodyView->sortByColumn(0,Qt::AscendingOrder);
  ui->bodyView->setColumnWidth(0,30);
  ui->bodyView->setColumnWidth(1,80);
  for(int x=2;x<ui->columns->maximum()+2;x++) ui->bodyView->setColumnWidth(x,40);
  ui->bodyView->setEditTriggers(QAbstractItemView::NoEditTriggers);
  ui->bodyView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  ui->bodyView->setAlternatingRowColors(true);
  ui->bodyView->show();

在程序的更下方,我将数据添加到要显示的表中。这没有问题。我的问题是: 我如何访问各个行来格式化行,我想更改字体的大小,格式化显示以显示对齐的数字并使其变为粗体,但仅适用于特定行。 感谢您的帮助。

【问题讨论】:

  • 行是什么意思?请你解释一下,你可以显示你想要的图像。
  • 你说的行,是指一列,还是一行,还是有某个单元格?
  • 对不起,我的意思是排,我刚刚更新了帖子。我想要的是例如使用更大的字体、粗体和更改背景来制作第 6 行,以将用户的眼睛吸引到该行。列或单元格也是如此。

标签: qt


【解决方案1】:

Qt 提出的自定义单个视图项渲染(和编辑)细节的解决方案是通过delegates。自定义级别取决于您的用例:您可以进行一些细微的调整,例如更改字体,或者您可以绘制一些完全特别的东西,例如 Star Delegate 示例中显示的内容。

基本上有两个选项来处理自定义委托:或者子类化QStyledItemDelegate(或者它的基类QItemDelegate,如果你需要特别地绘制Qt的数据类型的项目)并将一些特别感兴趣的细节更改为您将其余部分留给基类或子类QAbstractItemDelegate 以完全控制视图项的外观和行为。

可以通过以下三种不同方式为视图设置委托:

  1. 通过setItemDelegate 方法获取整个视图(即所有模型项)
  2. 通过setItemDelegateForColumn 方法针对特定列
  3. 通过setItemDelegateForRow 方法获取特定行

为了举例,以下是如何为项目渲染指定稍大的字体大小:

class CustomDelegate: public QStyledItemDelegate
{
public:
    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
                         const QModelIndex &index) const Q_DECL_OVERRIDE;
};

void CustomDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                         const QModelIndex &index) const
{
    if (!index.isValid()) {
        return;
    }

    QFont font = option.font;
    font.setPointSize(font.pointSize() + 1);

    QStyleOptionViewItem localOption(option);
    localOption.font = font;
    QStyledItemDelegate::paint(painter, localOption, index);
}

【讨论】:

  • 谢谢德米特里,我想我明白了。我会试试看的。
  • 测试过了,这正是我需要的。谢谢。
  • 不客气。如果您觉得答案有用,请将其标记为已接受,谢谢。
猜你喜欢
  • 2018-01-05
  • 2011-04-16
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多