C++ QT tableView在设置自定义标题后不显示标题标签

ztmd8pv5  于 2023-03-14  发布在  其他
关注(0)|答案(1)|浏览(248)

我正在使用一个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继承的自定义类型,QHeaderView只实现了sizeHint()。目前它只返回QHeaderView::sizeHint()。该类还没有什么特别之处。
  • entitlementLicenseModelMap有点奇怪,但我相信它与这个问题无关。整个for循环可以看作只是设置一个表模型。该表模型是一个QStandardItemModel。
  • 在前面的代码中,为模型设置了一个自定义委托。但是这个委托还没有实现。它只是为了以后做一些绘画的事情而设置的。它继承自QStyledItemDelegate,并且只实现绘画函数,该函数目前只保存绘画器,调用QStyledItemDelegate::paint(...),然后恢复绘画器。我不认为这个委托是相关的,但是很高兴得到纠正。
txu3uszq

txu3uszq1#

对于遇到此问题的其他人,您只需手动调用:

header->setVisible(true)

为什么在没有另外指定的情况下,默认情况下标头通常可见。

相关问题