单击 QDockWidget 的选项卡时的通知?
Notification when QDockWidget's tab is clicked?
我需要在用户单击选项卡化 QDockWidget 的选项卡时执行一段代码。到目前为止,我一直在使用 "visibilityChanged" 事件通过 hack 来做到这一点,但这现在引起了问题(例如,如果我有几个标签化的停靠小部件并且我拖出一个使其浮动,标签化的一个下面将触发它的 "visibilityChanged" 事件,我会错误地将其解释为用户单击选项卡)。当用户单击 QDockWidgets 的选项卡时,我如何才能收到适当的通知?我已经尝试过 QDockWidget 的 "focusInEvent",但是当点击选项卡时它似乎没有触发。
当你使用tabifyDockWidget()
方法时QMainWindow
创建了一个QTabBar
,这不能直接访问但是使用findChild()
你可以得到它,然后使用tabBarClicked
信号
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
first_dock = None
for i in range(10):
dock = QtGui.QDockWidget("title {}".format(i), self)
dock.setWidget(QtGui.QTextEdit()) # testing
self.addDockWidget(QtCore.Qt.TopDockWidgetArea, dock)
if first_dock:
self.tabifyDockWidget(first_dock, dock)
else:
first_dock = dock
dock.raise_()
tabbar = self.findChild(QtGui.QTabBar, "")
tabbar.tabBarClicked.connect(self.onTabBarClicked)
def onTabBarClicked(self, index):
tabbar = self.sender()
text = tabbar.tabText(index)
print("index={}, text={}".format(index, text))
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
我需要在用户单击选项卡化 QDockWidget 的选项卡时执行一段代码。到目前为止,我一直在使用 "visibilityChanged" 事件通过 hack 来做到这一点,但这现在引起了问题(例如,如果我有几个标签化的停靠小部件并且我拖出一个使其浮动,标签化的一个下面将触发它的 "visibilityChanged" 事件,我会错误地将其解释为用户单击选项卡)。当用户单击 QDockWidgets 的选项卡时,我如何才能收到适当的通知?我已经尝试过 QDockWidget 的 "focusInEvent",但是当点击选项卡时它似乎没有触发。
当你使用tabifyDockWidget()
方法时QMainWindow
创建了一个QTabBar
,这不能直接访问但是使用findChild()
你可以得到它,然后使用tabBarClicked
信号
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
first_dock = None
for i in range(10):
dock = QtGui.QDockWidget("title {}".format(i), self)
dock.setWidget(QtGui.QTextEdit()) # testing
self.addDockWidget(QtCore.Qt.TopDockWidgetArea, dock)
if first_dock:
self.tabifyDockWidget(first_dock, dock)
else:
first_dock = dock
dock.raise_()
tabbar = self.findChild(QtGui.QTabBar, "")
tabbar.tabBarClicked.connect(self.onTabBarClicked)
def onTabBarClicked(self, index):
tabbar = self.sender()
text = tabbar.tabText(index)
print("index={}, text={}".format(index, text))
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())