如何在Qt中向QTableWidget添加带有数据的表头?

4

我仍在学习Qt,非常感谢SO社区为我提供了有关Qt问题的非常及时和优秀的答案。谢谢。

我对向QTableWidget添加标题的概念感到相当困惑。我想要创建一个包含有关团队成员信息的表格。每个成员的row应该包含他的名字和姓氏,分别在自己的单元格中,一个电子邮件地址在一个单元格中,另一个单元格中是办公室。我想要在这些列上方拥有一个header,以适当的名称命名它们。

我试图从简单的开始,只显示“Last”(即姓氏)的标题。以下是我的代码。

int column = m_ui->teamTableWidget->columnCount();
m_ui->teamTableWidget->setColumnCount(column+1);
QString* qq = new QString("Last");
m_ui->teamTableWidget->horizontalHeader()->model()->setHeaderData(0, 
Qt::Horizontal, QVariant(QVariant::String, &qq));

我的表格被正确地渲染出来了,但标题并不包含我期望的内容。它只包含一个单元格,其中包含文本“1”。

显然,我在做一些非常愚蠢的事情,但我很迷茫。我不断地查阅文档,却找不到答案。

感谢任何和所有的帮助。


如果这是你问题的真正答案,你应该将其发布为答案并接受它。 - Caleb Huitt - cjhuitt
4个回答

12
最简单的解决方案是使用 setHorizontalHeaderLabels(myListOfHeaderLabels) 方法设置表头标签。

我的意思实际上是要链接到 QTableWidget::setHorizontalHeaderLabels。方法名称相同,功能也相同。 - Lukáš Lalinský

5

我看到一个潜在的问题,以及一种更简单的方法来解决它。

首先,问题是:

QString* qq = new QString("Last"); // <- qq is a pointer to a string.
m_ui->teamTableWidget->horizontalHeader()->model()->setHeaderData(0, 
    Qt::Horizontal, 
    QVariant(QVariant::String, &qq)); // <- You take the address of a pointer, or create a handle.

我认为你想要做的是这样的:

相反,我建议你这样做:

QString* qq = new QString("Last");
m_ui->teamTableWidget->horizontalHeader()->model()->setHeaderData(0, 
    Qt::Horizontal, QVariant(QVariant::String, *qq));

现在,设置标题项数据的更简单方法是:
m_ui->teamTableWidget->horizontalHeaderItem( 0 )->setText( "Last" );

谢谢。请看我在问题中的编辑,看看我是如何解决它的。你的帮助让我成功了。再次感谢。 - San Jacinto

3

在那位引导我到正确位置的人的要求下,我将实现方式作为答案发布并接受。

    m_ui->teamTableWidget->setColumnCount(m_ui->teamTableWidget->columnCount()+1);
    QTableWidgetItem* qtwi = new QTableWidgetItem(QString("Last"),QTableWidgetItem::Type);
    m_ui->teamTableWidget->setHorizontalHeaderItem(0,qtwi);
注:以上代码为IT技术相关内容。

3

为了后人记录:

在QAbstractItemModel中,setHeaderData()和headerData()的默认实现都没有任何作用。你应该重新实现headerData()来返回一个有用的标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接