QLineEdit-focus event

j'ai pour vous connecter événements de focus à partir de certains QLineEdit (élémentinterface utilisateur->lineEdit) à la méthode focus (). Comment puis-je faire cela?

8
demandé sur Ockonal 2010-05-10 19:51:05

2 réponses

il n'y a pas de signal émis lorsqu'un QLineEdit obtient la mise au point. Par conséquent, l'idée de relier une méthode à l'événement principal n'est pas directement appropriée.

Si vous voulez avoir un focused signal, vous devrez dériver la classe Qlinedit. Voici un exemple de comment cela peut être réalisé.

Dans le myLineEdit.h fichier:

class MyLineEdit : public QLineEdit
{
  Q_OBJECT

public:
  MyLineEdit(QWidget *parent = 0);
  ~MyLineEdit();

signals:
  void focussed(bool hasFocus);

protected:
  virtual void focusInEvent(QFocusEvent *e);
  virtual void focusOutEvent(QFocusEvent *e);
}

Dans le myLineEdit.cpp fichier :

MyLineEdit::MyLineEdit(QWidget *parent)
 : QLineEdit(parent)
{}

MyLineEdit::~MyLineEdit()
{}

void MyLineEdit::focusInEvent(QFocusEvent *e)
{
  QLineEdit::focusInEvent(e);
  emit(focussed(true));
}

void MyLineEdit::focusOutEvent(QFocusEvent *e)
{
  QLineEdit::focusOutEvent(e);
  emit(focussed(false));
}

vous pouvez maintenant connecter le MyLineEdit::focussed() signal à votre focus() méthode (fente.)

24
répondu Lohrun 2013-10-11 13:10:50

je suppose que vous voulez dire connecter comme dans signals/ slots, focus event n'est pas un signal c'est une méthode virtuelle que vous devez outrepasser afin de changer le comportement:

http://doc.qt.io/qt-5/qlineedit.html#focusInEvent

2
répondu oscode 2015-10-01 06:08:25