拦截并忽略 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
在内部使用QTabBar
和Qt::WheelFocus
,因此滚轮事件永远不会传播到选项卡小部件。
【讨论】:
以上是关于拦截并忽略 QTabWidget 中的***事件的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 Mac 上让 Java 小程序忽略/通过 Command+Q 吗?
[QT]MdiArea子窗口的管理,拦截子窗口关闭消息并在父窗口处理