我想要做的是有一个表格不能直接编辑,但可以在表格外的某个小部件中编辑。也就是说,可以在这里编辑所选节点,并且所有节点都使用相同的编辑器,因为我希望它始终显示。
我尝试过的是继承QItemDelegate并返回我已经拥有的QTextEdit实例,如下所示:
class Delegate extends QItemDelegate {
@Override
public QWidget createEditor(QWidget parent, QStyleOptionViewItem option, QModelIndex index) {
return qtextEdit;
}
}
有效,除了当你离开编辑器时它被破坏了。也许委托不应该以这种方式使用。那我该怎么做呢?
(ps。我使用jambi,但c ++代码很好)
答案 0 :(得分:2)
QDataWidgetMapper
类正是您想要的,可以编辑外部控件中视图外的任何记录的值。
直接从documentation开始,这是您使用它的方式:
QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();
并且,如果您有一个视图(QTreeView / QListView / QTableView / etc)并且您想要编辑当前选择的项目,请连接相应的信号&插槽:
connect(&view, SIGNAL(activated(QModelIndex)), mapper, SLOT(setCurrentModelIndex(QModelIndex)));