如何从QTableView获取当前的编辑器?

4

在编辑过程中,有没有一种方法可以获取编辑器(即QLineEdit实例)?

2个回答

7
代理创建编辑小部件,但不存储它,视图也不提供对它的访问(可能是因为它不是持久的)。
因此,您将需要子类化QStyledItemDelegate,并重新实现createEditor(QWidget*,const QStyleOptionViewItem&,const QModelIndex&) const来存储返回指针的副本。然后,您可以通过代理提供对编辑器的访问。
据我所知,在单个视图中无法同时创建多个编辑器,并且跨视图共享委托被 不鼓励,因此持有最后创建的编辑器应该足够。我还会创建一个私有槽,将其设置为空指针,并将其连接到已创建编辑器的销毁信号 - 这样您就知道它始终有效。

我有同样的想法 - 但是有一个小问题:方法 createEditor(QWidget*, const QStyleOptionViewItem&, const QModelIndex&) const 被标记为 const - 所以你不能修改 this 对象,这意味着你实际上不能存储被返回的指针。或者我漏掉了什么? - murison
3
指针的存储可以简单地标记为“可变的”。 - cmannett85

0

这是一个老问题,但我在研究这个确切的问题时找到了它。

我是这样解决的:

QStyledItemDelegate::createEditor 中,我发出一个 const 信号,通知有一个编辑器被创建,并附带指向新创建的编辑器的指针。我将此信号连接到我的视图,它不直接存储指针,而是使用 QPointer

这样,就可以轻松地检查是否有编辑器,也可以确保在使用时不会遇到段错误的危险,因为如果指向的对象已经被删除,QPointer 将指向 nullptr

因此,只需检查 QPointer 是否指向 nullptr(没有进行编辑)或不是(在这种情况下,它指向当前活动的编辑器)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接