【发布时间】:2021-10-11 10:42:58
【问题描述】:
我正在使用 tableView 并尝试实现一些尺寸样式。
代码:
// Setup table header items
Views::TeamTableHeaderView *header = new Views::TeamTableHeaderView(Qt::Horizontal);
ui->tableView->setHorizontalHeader(header);
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui->tableView->horizontalHeader()->setStretchLastSection(true);
ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter | (Qt::Alignment)Qt::TextWordWrap);
for(auto& tableModel : entitlementLicenseModelMap)
{
tableModel->setHorizontalHeaderLabels({"PRODUCT", "TOTAL SEATS", "VALID UNTIL"});
}
这根本不会在表格上显示任何标题。删除对 setHorizontalHeader(header) 的调用后,标题显示正常。但是,标头太细,无法在不将其切断的情况下呈现文本,因此我需要一个自定义标头 (TeamTableHeaderView) 来实现 sizeHint() 以使其更高。
我尝试在前后移动标题标签的设置,但问题是标题根本不显示,即使使用默认的“1”“2”“3”标签也是如此。
一些信息:
- 此代码在所有数据(成功)填充到 tableModel 后执行。
- tableView 是一个沼泽标准 QTableView
- TeamTableHeaderView 是继承自 QHeaderView 的自定义类型,仅实现 sizeHint()。目前它只返回 QHeaderView::sizeHint()。这门课还没有什么特别之处。
- entitlementLicenseModelMap 有点奇怪,但我相信与这个问题无关。您可以将整个 for 循环视为设置表模型。该表模型是 QStandardItemModel。
- 在代码的前面部分,为模型设置了一个自定义委托。但是,此委托尚未实现。它只是为了以后做一些绘画的东西而设置的。它继承自QStyledItemDelegate,只实现了paint函数,目前只保存painter,调用QStyledItemDelegate::paint(...)然后恢复painter。我不认为这个代表是相关的,但很高兴得到纠正。
【问题讨论】:
标签: c++ qt user-interface qtableview