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 回答