相关疑难解决方法(0)

对QLabel进行子类化以显示本机"鼠标悬停按钮指示器"

我有一个带有'StyledPanel,凸起'框架的QLabel.
它是可点击的,通过继承QLabel;

class InteractiveLabel(QtGui.QLabel):
    def __init__(self, parent):  
        QtGui.QLabel.__init__(self, parent)

    def mouseReleaseEvent(self, event):  
        self.emit(QtCore.SIGNAL('clicked()'))
Run Code Online (Sandbox Code Playgroud)

但是,一般意见认为这个'Box'不容易识别为可点击.
为了实现可用性,我希望"Box"显示当鼠标悬停在它上面时它是可点击的.
显然,通过连接mouseHoverEvent可以轻松实现对鼠标悬停的反应.

但是,"按钮指示器"必须是原生继承的,因为我的Qt应用程序允许用户更改样式(Windows XP,Windows 7,plastique,motif,cde).

此图像显示了我想要的两种不同风格的特定小部件(右下角)和鼠标悬停美学.

图像显示'Box'和plastique和Win7样式的悬停指示器

当鼠标悬停在'Box'上时,我希望它像顶部,中间的组合框一样响应.
('响应'是美学本土的,与所有Qt按钮一起出现,除了'CDE'和'motif'styles.).

有没有办法用PyQt4实现这个?
(我认为非原生解决方案会涉及QGradient并检查原生样式,但这很令人讨厌.)

更新:
lol4t0关于QLabel对QPushButton的想法.

这是我的pythonic实现,信号正常工作,所有适当的按钮美学.RichTextBox是您将嵌入到程序中的小部件.

from PyQt4 import QtCore, QtGui

class RichTextButton(QtGui.QPushButton):
    def __init__(self, parent=None):  
        QtGui.QPushButton.__init__(self, parent)
        self.UnitText = QtGui.QLabel(self)
        self.UnitText.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
        self.UnitText.setAlignment(QtCore.Qt.AlignCenter)
        self.UnitText.setMouseTracking(False)
        self.setLayout(QtGui.QVBoxLayout())
        self.layout().setMargin(0)
        self.layout().addWidget(self.UnitText)
Run Code Online (Sandbox Code Playgroud)

谢谢!


规格:
- python 2.7.2
- Windows 7
- PyQt4

qt pyqt subclass mouseover qlabel

3
推荐指数
1
解决办法
3807
查看次数

标签 统计

mouseover ×1

pyqt ×1

qlabel ×1

qt ×1

subclass ×1