我有一个带有'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'上时,我希望它像顶部,中间的组合框一样响应.
('响应'是美学本土的,与所有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