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

我显然在这里做了一些非常愚蠢的事情,这是错误的,但我迷路了。我不停地翻阅文档,一无所获。

感谢您的任何帮助。

4

4 回答 4

9

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

于 2009-11-24T21:34:26.217 回答
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" );
于 2009-11-25T16:10:42.090 回答
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);
于 2009-11-25T18:22:56.753 回答
3

为后代:

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

于 2011-12-16T18:55:37.553 回答