0

私は tqo 行編集を作成しようとしています。行編集ボックスをクリックすると、現在のテキストをクリアできるはずです。

以下のコードを試しましたが、成功しませんでした。

誰かがここで間違っていることを指摘できますか?

OPTIONS = ['Enter IP Address','Number of iteration']

def __init__(self, parent=None):
    QtGui.QWidget.__init__(self, 'Details', parent=parent)
    self.options = {}
    for option in OptionBox.OPTIONS:
        self.options[option] = (QtGui.QLineEdit(option))
        self.connect(self.options[option],  QtCore.SIGNAL("clicked()"), self.clicked)
    self._gridOptions()

def clicked(self):
    QLineEdit.clear()
4

1 に答える 1

1

QLineEdit でイベント フィルターを使用してクリック イベントをキャッチする必要があります ( https://qt-project.org/doc/qt-5.1/qtcore/qobject.html#eventFilter )。コードがどのように見えるかの例を次に示します。

def __init__(self, parent=None):
  QtGui.QWidget.__init__(self, 'Details', parent=parent)
  self.options = {}
  for option in OptionBox.OPTIONS:
    self.options[option] = QtGui.QLineEdit(option)
    self.options[option].installEventFilter(self)
  self._gridOptions()

def eventFilter(self, object, event):
  if (object in self.options.values()) and (event.type() == QtCore.QEvent.MouseButtonPress):
    object.clear()
    return False # lets the event continue to the edit
  return False

編集:私が理解していることから、役割を説明するデフォルトのテキストを QLineEdit に表示したいだけです。これは、 placeholderTextを使用する良い機会です。eventFilterこれを使用するために変更されたコードを次に示します (このメソッドはもう必要ありません)。

def __init__(self, parent=None):
  QtGui.QWidget.__init__(self, 'Details', parent=parent)
  self.options = {}
  for option in OptionBox.OPTIONS:
    self.options[option] = QtGui.QLineEdit()
    self.options[option].setPlaceholderText(option)
  self._gridOptions()
于 2013-07-22T08:46:51.190 に答える