如何将数据头添加到Qt中的QTableWidget?

时间:2009-11-24 21:28:32

标签: c++ qt qtgui qtablewidget qheaderview

我还在学习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 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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" );

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

后人:

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