QTableView格式单独的行和列

时间:2017-07-27 16:49:45

标签: qt

也许我要问的是如此基本以至于我错过了某个地方,但我谷歌所有的事情,我一直无法找到答案。我有以下表格视图,来自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();

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

1 个答案:

答案 0 :(得分:0)

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

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

可以通过三种不同的方式为视图设置代理:

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

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

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