Qtableview& Qdeligate - qtextedit在左下角开场

时间:2013-06-24 11:17:10

标签: qt qtableview

我正在Qtableview内的Qstandarditemmodel工作。我在Qtextedit派生的类中使用Qdeligates。这允许我在tableview中插入换行符。

大多数情况都很好但现在我面临的挑战是,当我点击一个单元格来编辑Qtextedit时,会在GUI的左下角打开。当我点击单元格row 0, column 3时,textedit会在左下角打开。

如何让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);

以下是我的代码:---

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

2 个答案:

答案 0 :(得分:0)

您需要设置自己创建的所有小部件的编辑器几何。这样可以为小部件提供表格单元格的正确尺寸。

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

答案 1 :(得分:0)

这进一步改善了它:---

editor->setGeometry(option.rect.x(),option.rect.y(),editor->sizeHint().width(),editor->sizeHint().height());