【发布时间】:2012-11-08 01:19:46
【问题描述】:
我有一个 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 区域时,我不能。
【问题讨论】:
-
问题不清楚,你试过SIGNALS和SLOTS吗?
-
@AmazingSixty 是的,我尝试使用 SIGNAL 和 SLOT 方法。但是,它在
mouseMoveEvent()上无法正常工作:( -
让我明白这一点吗?当用户点击 QLineEdit 时,您希望发生什么事情吗?
-
将代码粘贴到您的问题中,方便我们理解
-
无耻插件:如果您最终想了解有关此过程的更多详细信息,我实际上在我的 PyQt for Maya video tutorial 中创建了一个 Maya ChannelBox :-)
标签: pyqt mouseevent qlineedit