【问题标题】:C++ QT tableView not displaying header labels after setting a custom header [duplicate]C++ QT tableView在设置自定义标题后不显示标题标签[重复]
【发布时间】: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"});
}

这根本不会在表格上显示任何标题。删除对 setHorizo​​ntalHeader(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


    【解决方案1】:

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

    header->setVisible(true)
    

    为什么在没有特别指定的情况下,默认情况下标题通常是可见的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      相关资源
      最近更新 更多