Qt QPushButton 样式表 悬停态

3

我有以下的按钮样式:

QPushButton:hover{
        background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 :   1, stop :   0.0 #ffd9aa,
                stop :   0.5 #ffbb6e, stop :   0.55 #feae42, stop :   1.0 #fedb74);
}

QPushButton {
        border: 1px solid #6593cf;
        border-radius: 2px;
        padding: 5px 15px 2px 5px;
        background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 :   1, stop :   0.0 #f5f9ff,
                stop :   0.5 #c7dfff, stop :   0.55 #afd2ff, stop :   1.0 #c0dbff);
        color: #006aff;
        font: bold large "Arial";
        height: 30px;
}




QPushButton:pressed {
        background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 :   1, stop :   0.0 #c0dbff,
        stop :   0.5 #cfd26f, stop :   0.55 #c7df6f, stop :   1.0 #f5f9ff);
        padding-top: 2px;
        padding-left: 3px;

}


QPushButton:on {
        background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 :   1, stop :   0.0 #5AA72D,
        stop :   0.5 #B3E296, stop :   0.55 #B3E296, stop :   1.0 #f5f9ff);
        padding-top: 2px;
        padding-left: 3px;
}

QPushButton:disabled {
        background: transparent #e5e9ee;
        padding-top: 2px;        
        padding-left: 3px;
        color: black;
}

我有一个按钮,当按下时,侧边小部件会被调整大小。因此,按钮在按下时获得按下的样式,当我释放它时,它会获得悬停样式。此外,小部件会被调整大小,而按钮会“跟随”小部件。问题是,当我使用鼠标移动时,按钮保持悬停状态,并且在失去焦点时失去该状态。这是qt的错误还是我在样式表代码中漏掉了什么。我做了一个动画gif来展示这种情况:enter image description here。谢谢。
1个回答

5
你可以说这是Qt中的一个bug,但我认为这是由正确逻辑引起的一种bug。自己判断吧。 "Hover"状态由"WA_UnderMouse"小部件属性定义。该属性由应用程序设置:
if ((e->type() == QEvent::Enter || e->type() == QEvent::DragEnter) ...
        widget->setAttribute(Qt::WA_UnderMouse, true);
else if (e->type() == QEvent::Leave || e->type() == QEvent::DragLeave)
        widget->setAttribute(Qt::WA_UnderMouse, false);

QEvent::EnterQEvent::Leave事件仅在应用程序从操作系统接收鼠标事件时发送。
如果您不移动鼠标,则应用程序不会接收任何鼠标事件,因此WA_UnderMouse属性不会更改。
解决此问题的一种方法是在移动按钮小部件时自己设置Qt::WA_UnderMouse属性的正确值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接