我正在QTableView的QStandardItemModel中工作。我在从一个QTextEdit派生的类中使用QItemDelegate类。它包括在每个列的单元格内编辑文本,请参阅所附图片。
是否可以排除tableView第三列(所有单元格)包含此文本编辑?这意味着我不想在第三列单元格中编辑这个文本。
这是我对tableview的初始化代码:--
//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
{
}

发布于 2013-09-28 00:43:34
可以使用QAbstractItemView::setItemDelegateForColumn方法禁用列中的委托:
ui->testCaseTableView->setItemDelegate(mydelegate);
ui->testCaseTableView->setItemDelegateForColumn(2, 0);发布于 2013-09-27 12:55:10
要排除第三列将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);
}
}https://stackoverflow.com/questions/19051125
复制相似问题