(Qt) 如何在视图中实现 editorOpened(index) 和 editorClosed(index) 信号

Posted

技术标签:

【中文标题】(Qt) 如何在视图中实现 editorOpened(index) 和 editorClosed(index) 信号【英文标题】:(Qt) How to implement editorOpened(index) and editorClosed(index) signals in a view 【发布时间】:2012-07-06 23:47:44 【问题描述】:

我已经使用我的数据抽象方案将自己编码到一个角落,这导致我需要在我的视图中使用 editorOpened(QModelIndex) 和 editorClosed(QmodelIndex) 信号(几乎完全是 QTableView)。

原因是我的数据类具有自动行为,需要在编辑期间阻止/禁用,然后重新启用。

起初我想尝试使用自定义委托来实现,但由于几个原因遇到了问题:一个是使用为每个项目提供相同行为的自定义委托似乎有点过分,换句话说似乎应该由视图本身为所有项目完成。第二个问题是委托似乎是const,这使我无法为委托中的数据对象设置内部句柄。

查看视图方法,我发现 QAbstractItemView::edit 和 QAbstractItemView::closeEditor 非常适合使用 opens() 和 closed() 信号重新实现,但是我需要特定项目的索引/句柄正在编辑,我认为我无法从这些方法中获得...

在这一点上,我不知道我还能做什么。我将不胜感激任何正确方向的提示或指示!感谢阅读

【问题讨论】:

【参考方案1】:

我自己解决了...

我发现 QAbstractItemDelegate::editorEvent 是非常量的(我一定没有像以前阅读文档时那样仔细查看)。

我能够在此方法中的自定义委托中设置一个内部句柄,这使我可以简单地创建一个插槽来执行我在关闭时需要执行的操作,并将 closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint) 信号连接到它。

【讨论】:

以上是关于(Qt) 如何在视图中实现 editorOpened(index) 和 editorClosed(index) 信号的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 模型/视图中修改数据表示

如何在 Android 平板电脑上实现主从视图 Qt/QML?

QT 图形场景/视图 - 用鼠标移动

在不同的线程中拥有 Qt 只读模型和视图

如何在 Blackberry Cascades、QML 和 C++、QT 的列表视图中获取 Web 视图

Qt:如何在模型/视图设置中同步对来自多个线程的数据的访问?