Qt在焦点输入/输出事件中更改样式表

问题描述 投票:0回答:2

好吧,我现在感觉真的很蠢...我有一个QTableWidget,当它有焦点时,我想改变样式表,使它的边框“突出显示”。我可以通过子类化小部件的focusInEvent来做到这一点,但是如果我调用setStyleSheet()它会覆盖我之前做过的所有样式。以清洁的名义,我正试图找到最好的方法来改变边框颜色而不会覆盖我的其他造型。

作为一个说明,我试图找到为所有属性执行此操作的最佳方法。在这种情况下,我需要边框颜色,但我想我将来也想改变其他东西。

PyQt4中的简单示例:

class MyTableWidget(QtGui.QTableWidget):
    def __init__(self):
        super(MyTableWidget, self).__init__()
        self.style = "QTableView {background: red; selection-background-color: green; border: 1px solid gray}" # beautiful, I know...
        self.setStyleSheet(self.style)

    def focusInEvent(self, event):
        super(MyTableWidget, self).focusInEvent(event)
        self.setStyleSheet("border-color: blue")

    def focusOutEvent(self, event):
        super(MyTableWidget, self).focusOutEvent(event)
        self.setStyleSheet(self.style)
qt pyqt4 qstylesheet
2个回答
1
投票

只需要做类似的事情,发现QTableView :: focus试一试:)

class MyTableWidget(QtWidgets.QTableWidget):
    def __init__(self):
        super(MyTableWidget, self).__init__()
        self.style = """
            QTableView {
                background: red;
                selection-background-color: green;
                border: 1px solid gray;}
            QTableView::focus {border-color: blue;}"""
        self.setStyleSheet(self.style)

谢谢,马克


1
投票

您可以为悬停和选定/取消选择状态指定不同的样式表部件:

    self.setStyleSheet(                                                                                           
        """                                                                                                            
        QTableView {                                                                                                   
            selection-background-color: green;                                                                         
            background: red;                                                                                           
            border: 1px solid gray;                                                                                    
        }                                                                                                              
        QTableView::item:hover:selected {                                                                              
            background: green;                                                                                         
            border: 1px solid blue;                                                                                    
        }                                                                                                              
        QTableView::item:hover:!selected {                                                                             
            background: red;                                                                                           
            border: 1px solid blue;                                                                                    
        }                                                                                                              
        """)

使用此样式表,您根本不需要实现focusInEventfocusOutEvent,Qt的样式表引擎将为您处理事情。

© www.soinside.com 2019 - 2024. All rights reserved.