也许我要问的是如此基本以至于我错过了某个地方,但我谷歌所有的事情,我一直无法找到答案。我有以下表格视图,来自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();
在程序中,我将数据添加到要显示的表中。这没有问题。我的问题是: 如何访问各行来格式化行,我想改变字体的大小,格式化显示以显示数字对齐并使其成为粗体但仅适用于特定行。 谢谢你的帮助。
答案 0 :(得分:0)
Qt提出的解决方案是定制各个视图项目的细节呈现(和编辑)是通过delegates。自定义级别取决于您的用例:您可以进行一些小的调整,例如更改字体,或者您可以绘制一些完全特殊的内容,例如Star Delegate示例中显示的内容。
基本上有两个选项可以继续自定义委托:如果你需要特别绘制Qt数据类型的项目,你可以继承QStyledItemDelegate(或它的基类QItemDelegate。并将您感兴趣的一些特定细节更改为基类,或者您将QAbstractItemDelegate子类化为完全控制视图项的外观和行为。
可以通过三种不同的方式为视图设置代理:
为了举例,以下是如何为项目呈现指定稍大的字体大小:
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);
}