我想做的是有一个表格,该表格不能直接显示为可编辑,但可以在表格外的某些小部件中进行编辑。也就是说,可以在此处编辑所选节点,并且所有节点都使用相同的编辑器,因为我希望它始终显示。
我尝试的是子类化 QItemDelegate 并只返回我已经拥有的 QTextEdit 实例,如下所示:
class Delegate extends QItemDelegate {
@Override
public QWidget createEditor(QWidget parent, QStyleOptionViewItem option, QModelIndex index) {
return qtextEdit;
}
}
这有效,只是当您离开编辑器时它会被销毁。也许委托(delegate)不应该以这种方式使用。那么我该如何实现呢?
(ps.我使用 jambi 但 C++ 代码没问题)
最佳答案
QDataWidgetMapper
类正是您想要的,它可以在外部控件中编辑 View 之外的任何记录的值。
直接取自 documentation ,这就是您使用它的方式:
QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();
并且,如果您有一个 View (QTreeView/QListView/QTableView 等)并且您想要编辑当前选定的项目,请连接适当的信号和插槽:
connect(&view, SIGNAL(activated(QModelIndex)), mapper, SLOT(setCurrentModelIndex(QModelIndex)));
关于java - Qt:委托(delegate)给单个编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3127182/