Вопрос

Я все еще изучаю Qt и я в долгу перед сообществом SO за то, что оно предоставило мне отличные, очень своевременные ответы на мои вопросы по Qt.Спасибо.

Я совершенно сбит с толку идеей добавления заголовка к QTableWidget.Что я хотел бы сделать, так это создать таблицу, содержащую информацию о членах команды.Каждый row для участника должны быть указаны его имя и фамилия, каждое в отдельной ячейке, адрес электронной почты в одной ячейке и офис в другой ячейке.Я бы хотел, чтобы у меня был header над этими столбцами, чтобы назвать их соответствующим образом.

Я пытаюсь начать с простого и получить только заголовок для отображения "Last" (как в last name).Вот мой код.

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".

Очевидно, что я делаю здесь что-то очень глупое, что неправильно, но я заблудился.Я продолжаю просматривать документацию, но ничего не нахожу.

Спасибо за любую помощь.

Это было полезно?

Решение 3

По просьбе человека, который направил меня в нужное место, я публикую способ, которым я добился этого, в качестве ответа, и я принимаю его.

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

Другие советы

Самым простым решением является setHorizontalHeaderLabels(myListOfHeaderLabels).

Я вижу одну потенциальную проблему, а также более простой способ сделать это.

Во-первых, проблема:

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

Для потомков:

Значения setHeaderData() и headerData() по умолчанию в QAbstractItemModel ничего не делают.Вы можете (должны?) (повторно) задействуйте headerData(), чтобы вернуть полезную метку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top