- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想检测 QTabWidget 上的鼠标中键点击。我原以为 QWidget 上会有与鼠标事件相关的信号,但我看到的只是方法。
我是否需要对 QTabWidget 进行子类化,然后重写所述方法才能执行我想做的事情,还是我遗漏了什么?
最佳答案
您可以在 QTabBar
上安装事件过滤器(由 QTabWidget.tabBar()
返回)来接收和处理按下和释放事件,或者子类 QTabBar
重新定义mousePressEvent
和mouseReleaseEvent
,将QTabWidget
的QTabBar
替换为QTabWidget .setTabBar()
.
使用事件过滤器的示例:
class MainWindow(QMainWindow):
def __init__(self):
super(QMainWindow,self).__init__()
self.tabWidget = QTabWidget(self)
self.setCentralWidget(self.tabWidget)
self.tabWidget.tabBar().installEventFilter(self)
self.tabWidget.tabBar().previousMiddleIndex = -1
def eventFilter(self, object, event):
if object == self.tabWidget.tabBar() and \
event.type() in [QEvent.MouseButtonPress,
QEvent.MouseButtonRelease] and \
event.button() == Qt.MidButton:
tabIndex = object.tabAt(event.pos())
if event.type() == QEvent.MouseButtonPress:
object.previousMiddleIndex = tabIndex
else:
if tabIndex != -1 and tabIndex == object.previousMiddleIndex:
self.onTabMiddleClick(tabIndex)
object.previousMiddleIndex = -1
return True
return False
# function called with the index of the clicked Tab
def onTabMiddleClick(self, index):
pass
使用 QTabBar 子类的示例:
class TabBar(QTabBar):
middleClicked = pyqtSignal(int)
def __init__(self):
super(QTabBar, self).__init__()
self.previousMiddleIndex = -1
def mousePressEvent(self, mouseEvent):
if mouseEvent.button() == Qt.MidButton:
self.previousIndex = self.tabAt(mouseEvent.pos())
QTabBar.mousePressEvent(self, mouseEvent)
def mouseReleaseEvent(self, mouseEvent):
if mouseEvent.button() == Qt.MidButton and \
self.previousIndex == self.tabAt(mouseEvent.pos()):
self.middleClicked.emit(self.previousIndex)
self.previousIndex = -1
QTabBar.mouseReleaseEvent(self, mouseEvent)
class MainWindow(QMainWindow):
def __init__(self):
super(QMainWindow,self).__init__()
self.tabWidget = QTabWidget(self)
self.setCentralWidget(self.tabWidget)
self.tabBar = TabBar()
self.tabWidget.setTabBar(self.tabBar)
self.tabBar.middleClicked.connect(self.onTabMiddleClick)
# function called with the index of the clicked Tab
def onTabMiddleClick(self, index):
pass
(如果你想知道为什么这么简单的任务有这么多代码,点击被定义为一个按下事件,然后在大致相同的位置发生一个释放事件,所以按下的标签的索引必须是与发布的标签相同)。
关于python - QTabWidget 的 PyQt 鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9442165/
我开发了一个程序,我有 10 个备份。我向其中添加了一些行,当我编译项目时,现在出现以下错误: C:\Qt\Qt5.0.1\5.0.1\mingw47_32\include\QtWidgets\qta
我在 Ubuntu 上使用 Qt-5.8。这就是我的 QTabWidget 的显示方式: 黑点是我希望最小化按钮出现的位置。我遇到的一种方法是,我可以使用 QToolButton *qToolButt
我在 QTabWidget 上完成了以下样式(其中一个标签内有一个 QTabWidget): QTabBar::tab { border: 2px solid grey; } QTabBar:
TabWidget中的分隔线工作正常,但是当Tab窗口的背景设置为时 tabHost.getTabWidget().getChildTabViewAt(tabId).setBackgroundReso
我有一个带有六个选项卡的 QTabWidget,所有选项卡都有一个图标 -但图标不在选项卡的中央: 到目前为止我做了什么: tabWidget->setStyleSheet("QTabBar::tab
我目前正在使用样式表来为应用程序设置主题。这是我用于 QTabWidget 的样式表: /*QTabBar et QTabWidget*/ QTabBar::tab { background:
我有一个 QTabWidget包含 4 个选项卡。我想单独设置它们的每个标题的样式:我看到我可以使用样式表来做到这一点。但我的问题是,我不能只更改一个选项卡的标题(选项卡名称所在的位置),而不更改选项
我准备了一个小脚本来说明我的问题。事实上,我希望选项卡 1 (Tab 1) 中包含的按钮显示选项卡 4 (Tab 4)。 QTabWidget 包含在主类 (CLASSE_Main) 中,我从类 1
编辑:措辞并包括一个最低限度的可重复示例 我有一个关于对象名称如何在 PyQt5 中工作/OOP 如何在 PyQt5 中工作的问题: 背景 我正在开发一个包含 QTabWidget 的项目。每次单击“
我正在使用 Qt,并且在 Qt 设计器编辑器中有一个 QTabWidget 设置,您可以在图 1 中看到它。 正如您在 Tab4 之后看到的那样,一直到右边缘有一个空白空间,以某种方式我需要用一种颜色
我设置了ui->tabWidget->setTabsClosable(true);,但是QTabwidget在每个选项卡上仅显示一个十字,单击此按钮时不会关闭选项卡。要关闭标签页,我还需要做什么?我试
我正在使用带有三个选项卡的QTabWidget。 其中一个选项卡是关于信息/帮助的。所以我想使用问号图片 (.png) 而不是文本“帮助”。 这可能吗?我正在使用 Python/PyQt,但只能找到
我的应用程序上有一个 QTabWidget,因此用户可以通过单击标题来浏览标签页,我想知道用户何时打开标签页,他/她之前是否访问过该页面。在 QWizard 类中有一个方法 hasVisitedPag
我在使用 QTabWidget 时遇到了一些问题。如果缺少隐藏功能,我必须自己构建。根据我使用 removeTab 和 insertTab 的文档,但是使用 insert Tab 时,我无法显示已删除
我正在使用最新的 Qt 4.5 并使用 Qt Creator 创建我的 GUI。我的选项卡小部件在 Creator 中看起来不错,显示了所有图标。然而,当我编译并运行它时,没有图标,但选项卡比它们更宽
我想改变 tabwidget 背景的颜色。 我怎样才能改变蓝线的颜色?? 我的代码是: public class MainActivityNew extends ActionBarActivity i
我在创建 UI 时遇到了一些困难。 我需要什么: 1 个 QTabWidget 和 3 个 QWidget 作为标签。其中一个 Widget 包含 QPushButtons、QLineEdits,并且
我正在学习 Qt 和一般的 C++,我被这个问题困住了。希望回答起来很简单。 我有一个由这段代码创建的QTextEdit: void MainWindow::on_actionNewtab_trigg
我正在尝试创建一个具有多个选项卡的 QTabWidget 的图形用户界面。作为初步测试,我创建了一个具有两个使用相同布局的选项卡的测试。第一个选项卡(第 1 页)是空白的,但第二个选项卡显示了我创建的
我正在使用 QTabWidget(由 AbstractManagerTab 组成的 pHTab)来显示一些数据(IpTrafficPage 和 SpecTrafficPage 小部件),我需要将 QP
我是一名优秀的程序员,十分优秀!