提交 f291068e 编写于 作者: 之一Yo's avatar 之一Yo

修复右击表格和列表组件无法选中对应行的问题 (#356)

上级 38c09357
...@@ -20,6 +20,8 @@ class Demo(QWidget): ...@@ -20,6 +20,8 @@ class Demo(QWidget):
# self.listWidget.setAlternatingRowColors(True) # self.listWidget.setAlternatingRowColors(True)
# self.listWidget.setSelectRightClickedRow(True)
stands = [ stands = [
'白金之星', '绿色法皇', "天堂制造", "绯红之王", '白金之星', '绿色法皇', "天堂制造", "绯红之王",
'银色战车', '疯狂钻石', "壮烈成仁", "败者食尘", '银色战车', '疯狂钻石', "壮烈成仁", "败者食尘",
......
...@@ -36,6 +36,9 @@ class Demo(QWidget): ...@@ -36,6 +36,9 @@ class Demo(QWidget):
# NOTE: use custom item delegate # NOTE: use custom item delegate
# self.tableView.setItemDelegate(CustomTableItemDelegate(self.tableView)) # self.tableView.setItemDelegate(CustomTableItemDelegate(self.tableView))
# select row on right-click
# self.tableView.setSelectRightClickedRow(True)
self.tableView.setWordWrap(False) self.tableView.setWordWrap(False)
self.tableView.setRowCount(60) self.tableView.setRowCount(60)
self.tableView.setColumnCount(5) self.tableView.setColumnCount(5)
......
# coding:utf-8 # coding:utf-8
from typing import List, Union from typing import List, Union
from PyQt5.QtCore import Qt, pyqtSignal, QModelIndex, QItemSelectionModel from PyQt5.QtCore import Qt, pyqtSignal, QModelIndex, QItemSelectionModel, pyqtProperty
from PyQt5.QtGui import QPainter from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QStyleOptionViewItem, QListView, QListWidgetItem, QListView, QListWidget from PyQt5.QtWidgets import QStyleOptionViewItem, QListView, QListWidgetItem, QListView, QListWidget, QWidget
from .scroll_bar import SmoothScrollDelegate from .scroll_bar import SmoothScrollDelegate
from .table_view import TableItemDelegate from .table_view import TableItemDelegate
...@@ -32,6 +32,7 @@ class ListBase: ...@@ -32,6 +32,7 @@ class ListBase:
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.delegate = ListItemDelegate(self) self.delegate = ListItemDelegate(self)
self.scrollDelegate = SmoothScrollDelegate(self) self.scrollDelegate = SmoothScrollDelegate(self)
self._isSelectRightClickedRow = False
FluentStyleSheet.LIST_VIEW.apply(self) FluentStyleSheet.LIST_VIEW.apply(self)
self.setItemDelegate(self.delegate) self.setItemDelegate(self.delegate)
...@@ -66,13 +67,21 @@ class ListBase: ...@@ -66,13 +67,21 @@ class ListBase:
QListView.keyPressEvent(self, e) QListView.keyPressEvent(self, e)
self.updateSelectedRows() self.updateSelectedRows()
def mousePressEvent(self, e):
if e.button() == Qt.LeftButton or self._isSelectRightClickedRow:
return QListView.mousePressEvent(self, e)
index = self.indexAt(e.pos())
if index.isValid():
self._setPressedRow(index.row())
QWidget.mousePressEvent(self, e)
def mouseReleaseEvent(self, e): def mouseReleaseEvent(self, e):
QListView.mouseReleaseEvent(self, e) QListView.mouseReleaseEvent(self, e)
self.updateSelectedRows()
row = self.indexAt(e.pos()).row() if self.indexAt(e.pos()).row() < 0 or e.button() == Qt.RightButton:
if row >= 0 and e.button() != Qt.RightButton:
self.updateSelectedRows()
else:
self._setPressedRow(-1) self._setPressedRow(-1)
def setItemDelegate(self, delegate: ListItemDelegate): def setItemDelegate(self, delegate: ListItemDelegate):
...@@ -108,9 +117,25 @@ class ListWidget(ListBase, QListWidget): ...@@ -108,9 +117,25 @@ class ListWidget(ListBase, QListWidget):
self.updateSelectedRows() self.updateSelectedRows()
def isSelectRightClickedRow(self):
return self._isSelectRightClickedRow
def setSelectRightClickedRow(self, isSelect: bool):
self._isSelectRightClickedRow = isSelect
selectRightClickedRow = pyqtProperty(bool, isSelectRightClickedRow, setSelectRightClickedRow)
class ListView(ListBase, QListView): class ListView(ListBase, QListView):
""" List view """ """ List view """
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
\ No newline at end of file
def isSelectRightClickedRow(self):
return self._isSelectRightClickedRow
def setSelectRightClickedRow(self, isSelect: bool):
self._isSelectRightClickedRow = isSelect
selectRightClickedRow = pyqtProperty(bool, isSelectRightClickedRow, setSelectRightClickedRow)
\ No newline at end of file
# coding: utf-8 # coding: utf-8
from typing import List, Union from typing import List, Union
from PyQt5.QtCore import Qt, QMargins, QModelIndex, QItemSelectionModel from PyQt5.QtCore import Qt, QMargins, QModelIndex, QItemSelectionModel, pyqtProperty
from PyQt5.QtGui import QPainter, QColor, QKeyEvent, QPalette, QBrush from PyQt5.QtGui import QPainter, QColor, QKeyEvent, QPalette, QBrush
from PyQt5.QtWidgets import (QStyledItemDelegate, QApplication, QStyleOptionViewItem, from PyQt5.QtWidgets import (QStyledItemDelegate, QApplication, QStyleOptionViewItem,
QTableView, QTableWidget, QWidget, QTableWidgetItem, QHeaderView) QTableView, QTableWidget, QWidget, QTableWidgetItem, QHeaderView)
...@@ -147,6 +147,7 @@ class TableBase: ...@@ -147,6 +147,7 @@ class TableBase:
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.delegate = TableItemDelegate(self) self.delegate = TableItemDelegate(self)
self.scrollDelagate = SmoothScrollDelegate(self) self.scrollDelagate = SmoothScrollDelegate(self)
self._isSelectRightClickedRow = False
# set style sheet # set style sheet
FluentStyleSheet.TABLE_VIEW.apply(self) FluentStyleSheet.TABLE_VIEW.apply(self)
...@@ -191,13 +192,21 @@ class TableBase: ...@@ -191,13 +192,21 @@ class TableBase:
QTableView.keyPressEvent(self, e) QTableView.keyPressEvent(self, e)
self.updateSelectedRows() self.updateSelectedRows()
def mousePressEvent(self, e):
if e.button() == Qt.LeftButton or self._isSelectRightClickedRow:
return QTableView.mousePressEvent(self, e)
index = self.indexAt(e.pos())
if index.isValid():
self._setPressedRow(index.row())
QWidget.mousePressEvent(self, e)
def mouseReleaseEvent(self, e): def mouseReleaseEvent(self, e):
QTableView.mouseReleaseEvent(self, e) QTableView.mouseReleaseEvent(self, e)
self.updateSelectedRows()
row = self.indexAt(e.pos()).row() if self.indexAt(e.pos()).row() < 0 or e.button() == Qt.RightButton:
if row >= 0 and e.button() != Qt.RightButton:
self.updateSelectedRows()
else:
self._setPressedRow(-1) self._setPressedRow(-1)
def setItemDelegate(self, delegate: TableItemDelegate): def setItemDelegate(self, delegate: TableItemDelegate):
...@@ -241,9 +250,25 @@ class TableWidget(TableBase, QTableWidget): ...@@ -241,9 +250,25 @@ class TableWidget(TableBase, QTableWidget):
self.updateSelectedRows() self.updateSelectedRows()
def isSelectRightClickedRow(self):
return self._isSelectRightClickedRow
def setSelectRightClickedRow(self, isSelect: bool):
self._isSelectRightClickedRow = isSelect
selectRightClickedRow = pyqtProperty(bool, isSelectRightClickedRow, setSelectRightClickedRow)
class TableView(TableBase, QTableView): class TableView(TableBase, QTableView):
""" Table view """ """ Table view """
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
def isSelectRightClickedRow(self):
return self._isSelectRightClickedRow
def setSelectRightClickedRow(self, isSelect: bool):
self._isSelectRightClickedRow = isSelect
selectRightClickedRow = pyqtProperty(bool, isSelectRightClickedRow, setSelectRightClickedRow)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册