QTableView & QDelegate - QTextEdit在左角打开。

问题描述 投票:0回答:2

我正在努力 QTableview 里面 QStandardItemModel. 我正在使用 QTextEdit 衍生于 Qdeligates. 这使我能够在tableview中插入换行。

大多数事情都很好,但现在我面临着一个挑战,当我点击一个单元格来编辑 QTextEdit 正在打开GUI的左角。当我点击单元格 row 0, column 3 文字编辑在左角打开。

我怎样才能让我的 QTextEdit 在我编辑的单元格附近打开 ? 另外,我应该在这个函数中加入什么 updateEditorGeometry ?

这是我为tableview编写的初始化代码:----。

ui->testCaseTableView->verticalHeader()->resizeSections(QHeaderView::ResizeToContents);  //---> original
ui->testCaseTableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
ui->testCaseTableView->horizontalHeader()->setStretchLastSection(true);

//Set model & deligate
ui->testCaseTableView->setModel(model);
ui->testCaseTableView->setItemDelegate(mydeligate);

这是我为deligate编写的代码:-----。

QWidget* textViewDeligate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{

    QTextEdit *tableEdit = new QTextEdit(parent);
    return tableEdit;
}

void textViewDeligate::setEditorData ( QWidget * editor, const QModelIndex & index ) const
{

    QString value = index.model()->data(index,Qt::EditRole).toString();

    QTextEdit *tableEditCopy = static_cast<QTextEdit*>(editor);
    tableEditCopy->setPlainText(value);
}

void    textViewDeligate::setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const
{
    QTextEdit *tableEditCopy = static_cast<QTextEdit*>(editor);
    QString str = tableEditCopy->toPlainText();

    model->setData(index, str, Qt::EditRole);

}

void    textViewDeligate::updateEditorGeometry ( QWidget *editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{

}

enter image description here

qt qtableview
2个回答
0
投票

你需要设置你自己创建的所有widgets的编辑器几何形状。这是为了让小组件得到表格单元格的正确尺寸。

void    textViewDeligate::updateEditorGeometry ( QWidget *editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
    editor->setGeometry(option.rect);
}

0
投票

这就是进一步改进它的原因:-----

editor->setGeometry(option.rect.x(),option.rect.y(),editor->sizeHint().width(),editor->sizeHint().height());
© www.soinside.com 2019 - 2024. All rights reserved.