Я пытаюсь изменить текст моего QHeaderView (Horizontal) в моем QTableWidget.
Первый вопрос: возможно ли установить его редактируемым, как QTableWidgetItem?
Второй вопрос: если это невозможно, как я могу это сделать, я попытался перекрасить это так:
void EditableHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
{
painter->save();
QHeaderView::paintSection(painter, rect, logicalIndex);
painter->restore();
painter->setPen(Qt::SolidLine);
painter->drawText(rect, Qt::AlignCenter, m_sValues[logicalIndex]);
}
Но индекс заголовка нарисован позади моего текста.
Другое решение, которое я попробовал:
void EditableHeaderView::mySectionDoubleClicked( int section )
{
if (section != -1) // Not on a section
m_sValues[section] = QInputDialog::getText(this, tr("Enter a value"), tr("Enter a value"), QLineEdit::Normal, "");
QAbstractItemModel* model = this->model();
model->setHeaderData(section, this->orientation(), m_sValues[section]);
this->setModel(model);
}
Но это не работает …
Я надеюсь, что у кого-то есть решение.
Спасибо !
Это может быть сделано без подклассов, также вам не нужно рисовать свой раздел, чтобы установить текст, сделайте это с setHeaderData
, Например, следующий код работает без ошибок.
//somewhere in constructor for example
connect(ui->tableWidget->horizontalHeader(),&QHeaderView::sectionDoubleClicked,[=]( int logicalIndex) {//with lambda
qDebug() << "works";
QString txt = QInputDialog::getText(this, tr("Enter a value"), tr("Enter a value"), QLineEdit::Normal, "");
ui->tableWidget->model()->setHeaderData(logicalIndex,Qt::Horizontal,txt);
});
До:
После:
Я использовал здесь C++11
(CONFIG += c++11
в .pro
файл) и новый синтаксис сигналов и слотов, но, конечно, вы можете использовать старый синтаксис, если хотите.
Я не знаю, почему ваше решение не работает, но я нашел очень простой обходной путь:
QString res = QInputDialog::getText(this, tr("Enter a value"), tr("Enter a value"), QLineEdit::Normal, "");
setHorizontalHeaderItem(logicalIndex, new QTableWidgetItem(res));
Спасибо за помощь !