Como adiciono um cabeçalho com dados a um QTableWidget no QT?
-
22-09-2019 - |
Pergunta
Ainda estou aprendendo QT e estou em dívida com a comunidade SO por me fornecer ótimas respostas muito oportunas para minhas perguntas do QT. Obrigada.
Estou bastante confuso com a ideia de adicionar um cabeçalho a um QTableWidget
. O que eu gostaria de fazer é ter uma tabela que contenha informações sobre os membros da equipe. Cada row
Para um membro, deve conter seu primeiro e sobrenome, cada um em sua própria célula, um endereço de e -mail em uma célula e escritório na outra célula. Eu teria para ter um header
Acima dessas colunas para nomeá -las conforme apropriado.
Estou tentando começar fácil e obter apenas o cabeçalho para exibir "último" (como no sobrenome). Aqui está o meu código.
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));
Minha mesa é renderizada corretamente, mas o cabeçalho não contém o que eu esperaria. Ele contém 1 célula que contém o texto "1".
Obviamente, estou fazendo algo muito bobo aqui que está errado, mas estou perdido. Eu continuo despejando a documentação, não encontrando nada.
Obrigado por toda e qualquer ajuda.
Solução 3
A pedido da pessoa que me orientou para o lugar certo, estou postando a maneira como consegui isso como resposta e estou aceitando.
m_ui->teamTableWidget->setColumnCount(m_ui->teamTableWidget->columnCount()+1); QTableWidgetItem* qtwi = new QTableWidgetItem(QString("Last"),QTableWidgetItem::Type); m_ui->teamTableWidget->setHorizontalHeaderItem(0,qtwi);
Outras dicas
A solução mais fácil é setHorizontalHeaderLabels(myListOfHeaderLabels)
.
Eu vejo um problema em potencial e também uma maneira mais fácil de fazer isso.
Primeiro, o problema:
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.
Eu acho que você quer fazer isso em vez disso:
QString* qq = new QString("Last");
m_ui->teamTableWidget->horizontalHeader()->model()->setHeaderData(0,
Qt::Horizontal, QVariant(QVariant::String, *qq));
Agora, a maneira mais fácil de definir os dados para um item de cabeçalho:
m_ui->teamTableWidget->horizontalHeaderItem( 0 )->setText( "Last" );
Para posteridade:
As implementações padrão de setheaderdata () e headerData () em QabstractItemModel não fazem nada. Você pode (deve?) (Re) implement headerdata () para retornar um rótulo útil.