我有一个 QWidget,它并排包含 QLabels 和 QLineEdits。
当我单击 QLabel 时,我可以在 QWidget 中使用 mousePressEvent。但是当我单击 QLineEdit 时,我无法在 QWidget 中检测到 mousePressEvent - 仅在 QLineEdit 中。我认为这与 QLineEdit 的工作方式有关 - 我不知道在整个区域内获取鼠标事件的方法。
编辑:
我已经为 Maya 制作了一个自定义频道框,就像上面一样。我尝试通过拖动鼠标来选择多个通道。但正如我所提到的,在 QLineEdit 区域我不能这样做。
class channelWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(channelWidget, self).__init__(parent)
self.resize(180, 20)
self.setMinimumSize(180, 20)
self.setMaximumHeight(20)
self.attr_label = QtGui.QLabel(self)
self.attr_label.setGeometry(QtCore.QRect(5, 0, 110, 20))
self.attr_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.value_field = focusLineEdit(self)
self.value_field.setGeometry(QtCore.QRect(120, 0, 60, 20))
self.value_field.setAlignment(QtCore.Qt.AlignLeft|QtCore.Qt.AlignLeading|QtCore.Qt.AlignVCenter)
self.value_field.setValidator(QtGui.QDoubleValidator())
每个元素由一个 QLabel 和一个 QLineEdit 组成。
class channelContainerWidget(QtGui.QWidget):
def updateChannel(self, node="", attrList=[]):
_l = self.channel_layout
_list = []
for w in [_l.itemAt(i).widget() for i in range(_l.count()) if _l.itemAt(i).widget()]:
if w in self._selectList: _list.append( str( w.attr_label.text() ) )
sip.delete(w)
_selList = []
for _id, at in enumerate(attrList):
_item = channelWidget(self)
_item.attr_label.setText(at)
_item.value_field.setText(value)
_l.insertWidget(_id, _item)
包含小部件的工作方式如上。当我单击 QLabel 区域时,我可以获得鼠标事件,但是当我单击 QLineEdit 区域时,我不能。