gpt4 book ai didi

c++ - 更改 QHeaderView 数据

转载 作者:太空宇宙 更新时间:2023-11-04 16:12:36 24 4
gpt4 key购买 nike

我尝试在我的 QTableWidget 中修改我的 QHeaderView(水平)的文本。

第一个问题:是否可以像 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);
});

之前:

enter image description here

之后:

enter image description here

我在这里使用C++11(CONFIG += c++11.pro 文件)和new syntax of signals and slots , 当然,如果需要,您可以使用旧语法。

关于c++ - 更改 QHeaderView 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26719640/

24 4 0
文章推荐: javascript - 如何不使 window.location 相对于文件
文章推荐: javascript - jquery 中的不同视口(viewport)宽度/高度插入
文章推荐: css - 将一个