QLabels와 QLineEdits가 나란히 포함 된 QWidget이 있습니다. 나는 QLabel을 클릭하면 QWidget이 QLineEdit 대신 마우스 이벤트를 감지 할 수 있습니까?
, 내가는 QWidget에서 mousePressEvent를 사용할 수 있습니다. 그러나 QLineEdit을 클릭하면 QLidEdit에서만 QWidget에서 mousePressEvent를 감지 할 수 없습니다. QLineEdit의 작동 방식과 관련이 있다고 생각합니다. 전 지역에서 마우스 이벤트를 얻는 방법을 모르겠습니다.편집 : 나는 위와 같이 마야에 대한 사용자 정의 채널 상자를 만든
. 마우스를 끌어서 여러 채널을 선택하려고합니다. 그러나 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 영역을 클릭하면 그럴 수 없습니다. 기본적으로 QLabel
가 mousePressEvent
을 무시하고 다음 부모까지 거품에 수 있기 때문에
질문이 명확하지 않습니다. 신호와 슬롯을 사용해 보셨습니까? – warunanc
@AmazingSixty 예, SIGNAL 및 SLOT 메서드로 시도했습니다. 하지만 (mouseMoveEvent'에 원하는대로, 그것은 –
이 날이 바로하자 :(') 작동하지 않습니다는 것, 그래서 귀하의 질문에 코드를 붙여 넣습니다 우리가 – warunanc