QLabels と QLineEdits を並べて含む QWidget があります。
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 領域をクリックすると取得できません。