0

QTableWidget で QHeaderView (Horizo​​ntal) のテキストを変更しようとしています。

最初の質問: QTableWidgetItem のように編集可能に設定することは可能ですか?

2 番目の質問: それができない場合、どうすればそれを行うことができますか? 次のように再描画しようとしました:

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

しかし、それはうまくいきません...

誰かが解決策を持っていることを願っています。

ありがとうございました !

4

2 に答える 2

3

あなたのソリューションが機能しない理由はわかりませんが、非常に簡単な回避策を見つけました。

QString res =  QInputDialog::getText(this, tr("Enter a value"), tr("Enter a value"), QLineEdit::Normal, "");
setHorizontalHeaderItem(logicalIndex, new QTableWidgetItem(res));

ご協力ありがとうございました !

于 2014-11-04T13:32:07.160 に答える