表中委托的 Qt 事件
Posted
技术标签:
【中文标题】表中委托的 Qt 事件【英文标题】:Qt event for delegate in table 【发布时间】:2015-05-07 13:45:27 【问题描述】:问题/问题
我尝试在自定义委托中重新实现 event
方法来处理点击。委托用于在表格视图中呈现表格单元格。但是,我没有得到委托的任何事件(根据调试器永远不会调用该方法)。我需要做些什么特别的事情才能让我的代表跟踪事件(特别是鼠标进入/退出、点击)?
上下文
我想为表格单元格创建自己的数据表示。功能应该接近按钮,但略有不同。我读到在表格中实现按钮的两个选项是设置一个据称具有很高性能成本的单元格小部件(我不太明白为什么)或使用委托。
因为我想要与按钮不同的行为,并且为了速度神话,我决定使用代表。
【问题讨论】:
如果您需要处理鼠标点击,请处理实际发生事件的对象的信号/事件。如果您的委托类为单元格表示提供小部件,请在该小部件上而不是在委托类中处理事件。 @vahancho 我的代表只是用QPainter.drawPixmap
绘制了一个QPixmap,我想没有什么可以吃掉这些事件。问题是,我是否需要以某种方式为我的委托启用事件,或者有什么理由让委托不应该接收事件?
如果您的委托只是用于绘画,那么您可以使用表格视图的QAbstractItemView::clicked()
信号来处理鼠标点击。根本不需要处理事件。
我只是继承QAbstractItemDelegate
,实际上我想处理鼠标向下/向上和鼠标悬停/鼠标移出事件。此外,即使事实证明有 buttonDown/up
、mouseEnter/leave
方法,我仍然想弄清楚为什么我的 event
函数根本没有被调用。
QAbstractItemDelegate
是QObject
。它不能接受和处理 GUI 事件。再次 - 在基于 QWidget 的类中处理 GUI 事件,例如,您的表格视图。
【参考方案1】:
鼠标事件被发送到QAbstractItemDelegate::editorEvent()
方法,即使它们没有开始编辑项目。
见:http://doc.qt.io/qt-5/qabstractitemdelegate.html#editorEvent
【讨论】:
以上是关于表中委托的 Qt 事件的主要内容,如果未能解决你的问题,请参考以下文章