如何将带有数据的标题添加到 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->setHorizontalHeaderItem(0,qtwi);【讨论】:
【参考方案4】:为了后代:
QAbstractItemModel 中 setHeaderData() 和 headerData() 的默认实现不做任何事情。您可以(应该?)(重新)实现 headerData() 以返回有用的标签。
【讨论】:
以上是关于如何将带有数据的标题添加到 Qt 中的 QTableWidget?的主要内容,如果未能解决你的问题,请参考以下文章