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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top