Как мне добавить заголовок с данными в QTableWidget в Qt?
-
22-09-2019 - |
Вопрос
Я все еще изучаю 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(), чтобы вернуть полезную метку.