Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. how to set hover effect on hovered row?
Forum Updated to NodeBB v4.3 + New Features

how to set hover effect on hovered row?

Scheduled Pinned Locked Moved Unsolved Qt for Python
1 Posts 1 Posters 179 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    ArthurPYQT
    wrote on last edited by
    #1
    
    import sys
    from PySide2.QtGui import QColor, QBrush, QCursor, QPainter, QPen, QFont
    from PySide2.QtWidgets import QStyledItemDelegate, QApplication, QTableView, QAbstractItemView, QStyle
    from PySide2.QtCore import Qt, QModelIndex, QAbstractTableModel, QEvent
    
    
    class TBV(QTableView):
        def __init__(self) -> None:
            super().__init__()
            self.setSelectionBehavior(QAbstractItemView.SelectRows)
            self.setMouseTracking(True)
    
    
    class DEG(QStyledItemDelegate):
        def __init__(self, parent=None) -> None:
            super().__init__(parent)
    
        def paint(self, painter, option, index: QModelIndex) -> None:
            if index.column() == 0:
    
                data = index.model().data(index, Qt.DisplayRole)
                painter.save()
                painter.setRenderHint(QPainter.Antialiasing, True)
                painter.setPen(QPen(QBrush(QColor(Qt.blue)), 1))
                font = QFont('Courier', 13)
                painter.setFont(font)
                painter.drawText(option.rect, Qt.AlignCenter, data)
                painter.restore()
                
            else:
                return super().paint(painter, option, index)
        
        
        def initStyleOption(self, option, index):
            super().initStyleOption(option, index)
    
            model = index.model()
            col = index.column()
            view = self.parent()
    
            if option.state & QStyle.State_MouseOver:
                option.backgroundBrush = QBrush(Qt.red)
            else:
                pos = view.viewport().mapFromGlobal(QCursor.pos())
                for c in range(model.columnCount()):
                    if c != col:
                        r = view.visualRect(index.siblingAtColumn(c))
                        if r.adjusted(0, 0, 1, 1).contains(pos):
                            option.backgroundBrush = QBrush(Qt.red)
                            break
    
    
    class MDL(QAbstractTableModel):
        def __init__(self, parent=None) -> None:
            super().__init__(parent)
            self._tabledata = [['mike', 12], ['kk', 13], ['jane', 14]]
    
        def rowCount(self, parent: QModelIndex = ...) -> int:
            return len(self._tabledata)
    
        def columnCount(self, parent: QModelIndex = ...) -> int:
            return len(self._tabledata[0] if self._tabledata else [])
    
        def data(self, index: QModelIndex, role: int = ...):
            if not index.isValid():
                return None
            if 0 == self.rowCount():
                return None
            if index.row() >= self.rowCount():
                return None
            if role == Qt.DisplayRole or role == Qt.EditRole:
                return self._tabledata[index.row()][index.column()]
    
            else:
                return None
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        demo = TBV()
        demo.setItemDelegate(DEG(demo))
        model = MDL(demo)
        demo.setModel(model)
        demo.show()
        sys.exit(app.exec_())
    
    

    here is a Qtableview rendered by QStyledItemDelegate, how to set hovered effect on the hovered row?

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved