改变 QTableView 的滚动方向
Change QTableView's scroll orientation
我环顾四周,似乎找不到任何示例可以帮助我在 QTableView
中更改滚轮的滚动方向。这是我最好的尝试。
这是我水平滚动所做的:
def eventFilter(self, obj, event):
#some of my widgets are disabled, I can simply do another if for enabled ones
if obj and obj.isEnabled() and event.type() == QEvent.Wheel and self.shift_key:
newEvent = QWheelEvent(obj.mapToParent(event.pos()), event.globalPos(),
event.delta(), event.buttons(),
event.modifiers(), 1)
QApplication.instance().postEvent(obj.parent(), newEvent)
return True
if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Shift:
self.shift_key = True
return True
elif event.type() == QEvent.KeyRelease and event.key() == Qt.Key_Shift:
self.shift_key = False
return True
return QObject.eventFilter(self, obj, event)
当我将鼠标悬停在 header 或空白 space 上时出现问题,因为它不会水平滚动并且还会显示一条错误消息
QApplication::postEvent: Unexpected null receiver
如何使用 scroll
+ shift
实现水平滚动?
如果您希望当焦点位于 QTableView
压力 shitf + scroll
的 viewport()
时水平滚动条移动,一个可能的解决方案是覆盖 wheelEvent
方法, 制作过滤器并将事件发送到 horizontalScrollBar()
:
from PyQt4 import QtCore, QtGui
class TableView(QtGui.QTableView):
def wheelEvent(self, event):
if event.modifiers() == QtCore.Qt.ShiftModifier:
QtGui.QApplication.sendEvent(self.horizontalScrollBar(), event)
else:
QtGui.QTableView.wheelEvent(self, event)
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
lay = QtGui.QVBoxLayout(self)
tableview = TableView()
lay.addWidget(tableview)
model = QtGui.QStandardItemModel(10, 10)
tableview.setModel(model)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
我环顾四周,似乎找不到任何示例可以帮助我在 QTableView
中更改滚轮的滚动方向。这是我最好的尝试。
这是我水平滚动所做的:
def eventFilter(self, obj, event):
#some of my widgets are disabled, I can simply do another if for enabled ones
if obj and obj.isEnabled() and event.type() == QEvent.Wheel and self.shift_key:
newEvent = QWheelEvent(obj.mapToParent(event.pos()), event.globalPos(),
event.delta(), event.buttons(),
event.modifiers(), 1)
QApplication.instance().postEvent(obj.parent(), newEvent)
return True
if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Shift:
self.shift_key = True
return True
elif event.type() == QEvent.KeyRelease and event.key() == Qt.Key_Shift:
self.shift_key = False
return True
return QObject.eventFilter(self, obj, event)
当我将鼠标悬停在 header 或空白 space 上时出现问题,因为它不会水平滚动并且还会显示一条错误消息
QApplication::postEvent: Unexpected null receiver
如何使用 scroll
+ shift
实现水平滚动?
如果您希望当焦点位于 QTableView
压力 shitf + scroll
的 viewport()
时水平滚动条移动,一个可能的解决方案是覆盖 wheelEvent
方法, 制作过滤器并将事件发送到 horizontalScrollBar()
:
from PyQt4 import QtCore, QtGui
class TableView(QtGui.QTableView):
def wheelEvent(self, event):
if event.modifiers() == QtCore.Qt.ShiftModifier:
QtGui.QApplication.sendEvent(self.horizontalScrollBar(), event)
else:
QtGui.QTableView.wheelEvent(self, event)
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
lay = QtGui.QVBoxLayout(self)
tableview = TableView()
lay.addWidget(tableview)
model = QtGui.QStandardItemModel(10, 10)
tableview.setModel(model)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())