0

我正在 QStandardItemModel 中处理 QTableView。我在从 QItemDelegate 派生的类中使用 QTextEdit 类。它包括每列单元格内的文本编辑,请参见附图。

是否可以从包含此文本编辑中排除 tableView、第三列(所有单元格)?意味着我不希望在第三列单元格内编辑此文本。

这是我的 tableview 初始化代码:-

//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
{

}

在此处输入图像描述

4

2 回答 2

1

要排除第三列将 QTextEdit 作为编辑器小部件,您可以执行以下操作:

QWidget* textViewDeligate::createEditor(QWidget *parent,
                                        const QStyleOptionViewItem &option,
                                        const QModelIndex &index) const
{
    if (index.column() != 2) {
        // QTextEdit as editor for all columns but third.
        QTextEdit *tableEdit = new QTextEdit(parent);
        return tableEdit;
    } else {
        // Or return 0 to prevent editing this.
        return QItemDelegate::createEditor(parent, option, index);
    }
}
于 2013-09-27T12:55:10.560 回答
0

您可以使用QAbstractItemView::setItemDelegateForColumn方法禁用列中的委托:

ui->testCaseTableView->setItemDelegate(mydelegate);
ui->testCaseTableView->setItemDelegateForColumn(2, 0);
于 2013-09-28T00:43:34.817 回答