【发布时间】:2015-05-05 20:58:06
【问题描述】:
我正在使用QTreeView 和QAbstractItemModel 开发一个Qt 应用程序。
该模型包含一些异构数据,需要不同的控制进行编辑。我通过自定义委托来实现它,该委托查询 model.data(Qt::EditRole) 并且模型将返回 QWidget 以用作编辑器。
我喜欢 QLineEdit 的工作方式 - 当我按下回车键时,delegate::setModelData 会被自动调用,所以我确实不必必须将 QLineEdit::editingFinished 连接到 QAbstractItemDelegate::setModelData(),这非常方便,因为 QLineEdit 从模型以QWidget 的形式返回给委托,并且它不必关心它是什么类型的小部件。
使用QComboBox 有点棘手 - 我希望组合框在选择完成后提交,到目前为止我只能通过connect(myComboBox, SIGNAL(activated(QString)), myDelegate, commitData())); 来完成它
但是,我的委托不知道编辑器小部件的类型,并且我不想为模型最终传递它的每个新编辑器编辑委托的代码。当在连接到其activated() 信号的插槽中单击输入时,我真的想强制组合框执行与 QLineEdit 相同的操作。
那么,QLineEdit 调用委托的setModelData 做什么?
Qt 中是否有一种通用的方式用于编辑器,无论是说“我完成了编辑,获取数据并将其传递给模型”?
【问题讨论】:
标签: qt delegates qlineedit qabstractitemmodel