How do I add a header with data to a QTableWidget in Qt?

╄→尐↘猪︶ㄣ 提交于 2019-11-28 01:57:25

问题


I'm still learning Qt and I am indebted to the SO community for providing me with great, very timely answers to my Qt questions. Thank you.

I'm quite confused on the idea of adding a header to a QTableWidget. What I'd like to do is have a table that contains information about team members. Each row for a member should contain his first and last name, each in its own cell, an email address in one cell, and office in the other cell. I'd to have a header above these columns to name them as appropriate.

I'm trying to start off easy and get just the header to display "Last" (as in last name). Here is my code.

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

My table gets rendered corretly, but the header doesn't contain what I would expect. It contains 1 cell that contains the text "1".

I am obviously doing something very silly here that is wrong, but i am lost. I keep pouring over the documentation, finding nothing.

Thanks for any and all help.


回答1:


The easiest solution is setHorizontalHeaderLabels(myListOfHeaderLabels).




回答2:


I see one potential problem, and also an easier way to do this.

First, the problem:

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.

I think you want to do this instead:

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

Now, the easier way to set the data for a header item:

m_ui->teamTableWidget->horizontalHeaderItem( 0 )->setText( "Last" );



回答3:


At the request of the person who steered me toward the right place, I am posting the way I accomplished this as an answer and I am accepting it.

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



回答4:


For posterity:

The default implimentations of setHeaderData() and headerData() in QAbstractItemModel do not do anything. You can (should?) (re)impliment headerData() in order to return useful a label.



来源:https://stackoverflow.com/questions/1793037/how-do-i-add-a-header-with-data-to-a-qtablewidget-in-qt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!