拦截并忽略 QTabWidget 中的***事件

Posted

技术标签:

【中文标题】拦截并忽略 QTabWidget 中的***事件【英文标题】:intercept and ignore a wheel event in a QTabWidget 【发布时间】:2016-06-29 07:33:50 【问题描述】:

我用 Qt 实现了一个 UI。我的 UI 是一个包含一些小部件的 主窗口,以及一个管理我的小部件行为的主管。在我的一个小部件 outputDataWidget 中,我有一个 QTabWidget 和其他一些小部件。

在我的 tabWidget 中,我有一个 dataEditor 来显示点,我创建了一个“+”选项卡来创建一个新选项卡。选项卡的创建是由一个连接函数完成的,它位于主窗口中:

connect(outputWidget.get(), SIGNAL(SIG_createNewOutput(int)), projectSupervisor.get(), SLOT(sCreateNewOutput(int)));

我的问题是:当我们在选项卡标题中使用鼠标滚轮按钮向右移动时,会创建一些新页面。我想拦截信号并避免创建新选项卡。 我尝试在主窗口和 outputdatawidget 中添加一个过滤器事件以忽略***事件。然后我尝试重新实现QTabWidget的wheelEvent(QWheelEvent* we)event(QEvent *e)。每次,我们在调用连接(创建选项卡)后进入这些修改。 您知道如何在连接之前调用事件,或者如何禁用 QTabWidget 的 wheelevent? 谢谢

【问题讨论】:

为什么要创建一个“+”标签?有一个按钮可能会更好,不是吗? @Boiethios 是对的,请检查***.com/a/27127109/6385043(首选 Qt 5)。 【参考方案1】:

您必须继承QTabBar 来处理QWheelEvent,然后在初始化期间调用QTabWidget::setTabBar

这是必要的,因为QTabWidget 在内部使用QTabBarQt::WheelFocus,因此滚轮事件永远不会传播到选项卡小部件。

【讨论】:

以上是关于拦截并忽略 QTabWidget 中的***事件的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 Mac 上让 Java 小程序忽略/通过 Command+Q 吗?

QTabWidget标签实现双击关闭(转)

QTabWidget 访问实际选项卡(不是内容小部件)

[QT]MdiArea子窗口的管理,拦截子窗口关闭消息并在父窗口处理

放在 QMainWindow 的 Central Widget 中的 QTabWidget 拉伸太多并覆盖了菜单栏

PyQt5:QTabWidget中的可关闭选项卡?