在委托的setModelData之后更新QStandardItem字段文本

时间:2014-05-20 12:04:42

标签: c++ qt model-view-controller delegates

概念/背景

我在我的Qt程序中使用模型/视图概念,其中委托用于编辑QTreeView中的QStandardItem。代表由QComboxBox s。

组成

对于QComboBox代表,我重新实现了QItemDelegate的以下功能:

QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;

setModelData最后将所选索引写回模型(QStandardItemModel)。这是通过将QComboBox的选择索引存储到QStandardItem的数据中来完成的。然后,将从setModelData内发出最终信号,以指示模型更新视图中的所有项目。由于视图中不同项之间存在依赖关系,因此需要更新(如果更改了一个项值,则其他位置的项值也将更改)。

问题

一切都很好。值将存储回模型。 但是,在模型中,我正在执行一个函数来使用setText函数更新一些QStandardItems文本。

这是我的问题: 当我从QComboBox中选择一个项目时,组合将被关闭,信号被发出,模型将更新所有相关的QStandardItem文本。例外:我仍然选择并且由QComboBox委派的项目没有更新的文本。似乎代理尚未被销毁,setText函数根本不影响QStandardItem文本值。

以下是一些说明问题的屏幕截图: enter image description here enter image description here 如您所见,通过模型的更新功能,它应具有“:”格式。但是,即使之后没有聚焦,QComboBox值仍然可见。

我可以通过再次发送更新请求信号来解决此问题,但我不知道何时这样做。

仅供参考:如果我选择另一个项目进行编辑并通过选择适当的索引来完成,则更新功能将在所有项目上运行,当然也会再次更新最后一个未更新的项目(除了上面提到的最后编辑的项目)上文)。

0 个答案:

没有答案