如何将带有数据的标题添加到 Qt 中的 QTableWidget?

Posted

技术标签:

【中文标题】如何将带有数据的标题添加到 Qt 中的 QTableWidget?【英文标题】:How do I add a header with data to a QTableWidget in Qt? 【发布时间】:2009-11-24 21:28:31 【问题描述】:

我仍在学习 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 个包含文本“1”的单元格。

我显然在这里做了一些非常愚蠢的错误,但我迷路了。我一直在翻阅文档,什么也没找到。

感谢所有帮助。

【问题讨论】:

如果这是您问题的实际答案,您应该将其作为答案发布并接受。 【参考方案1】:

最简单的解决方案是setHorizontalHeaderLabels(myListOfHeaderLabels)

【讨论】:

这实际上对我没有多大帮助,因为 QTableWidget 包含一个 QAbstractItemModel*,而不是一个 QStandardItemModel*。取消引用时,对 model() 的调用不能转换为 QStandardItemModel* 或段错误结果。如果我尝试使用 QTableWidget->setModel(),我无法编译,因为 setModel() 是私有的。 我实际上是想链接到QTableWidget::setHorizontalHeaderLabels。相同的方法名称,相同的功能。 @LukášLalinský:5 年后,我现在为您修复了断开的链接。 ;-) 但我认为您应该扩展您的答案,而不是仅链接。提供示例代码很容易。【参考方案2】:

我发现了一个潜在问题,也是一种更简单的方法。

首先,问题:

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" );

【讨论】:

谢谢。请查看我在问题中的编辑,看看我是如何解决它的。你的帮助让我到了那里。再次感谢。【参考方案3】:

应引导我走向正确位置的人的要求,我发布了我完成此操作的方式作为答案,我接受了它。

m_ui->teamTableWidget->setColumnCount(m_ui->teamTableWidget->columnCount()+1); QTableWidgetItem* qtwi = new QTableWidgetItem(QString("Last"),QTableWidgetItem::Type); m_ui->teamTableWidget->setHorizo​​ntalHeaderItem(0,qtwi);

【讨论】:

【参考方案4】:

为了后代:

QAbstractItemModel 中 setHeaderData() 和 headerData() 的默认实现不做任何事情。您可以(应该?)(重新)实现 headerData() 以返回有用的标签。

【讨论】:

以上是关于如何将带有数据的标题添加到 Qt 中的 QTableWidget?的主要内容,如果未能解决你的问题,请参考以下文章

Qt将“动作”添加到动态添加的QWidget

如何使用 Qt Creator 将 C++ 头文件添加到 Qt 项目

如何将带有对象的数组中的数据动态添加到嵌套数组中?

如何将带有图例键的数据表添加到 C# 中的 MS 图表?

netbeans:如何将小部件添加到 QT 变量

如何使用数组将带有数据的行添加到html表中,函数部分工作