Obtenez une notification/un événement / un signal lorsqu'un widget Qt se focalise
dans Qt, quand un widget reçoit focus, comment obtenir une notification à ce sujet, pour que je puisse exécuter du code personnalisé? Est-il un signal ou d'un événement?
8 réponses
Vous pouvez ajouter fr event filter
.
Ceci est un exemple d'une application écrite avec QtCreator. Ce formulaire a un QComboBox combobox.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->comboBox->installEventFilter(this);
.
.
.
}
bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::FocusOut)
{
if (object == ui->comboBox)
{
qWarning(object->objectName().toLatin1().data());
}
}
return false;
}
Qt Designer n'est pas conçu pour ce niveau de WYSIWYG de programmation.
le Faire en C++:
class LineEdit : public QLineEdit
{
virtual void focusInEvent( QFocusEvent* )
{}
};
il y a un signal" focus changed " envoyé lorsque le focus change, introduit dans Qt 4.1.
Il a deux arguments, le widget perdant la mise au point et celui gagnant la mise au point:
void QApplication::focusChanged(QWidget * old, QWidget * now)
il faudrait que je joue avec, mais en regardant la Documentation QT, il y a un "focusInEvent". C'est un gestionnaire d'événement.
Voici comment vous trouver des informations sur.... Ouvrez "Qt Assistant". Allez à L'Index. Mettez un "QLineEdit". Il y a un lien vraiment utile appelé "liste de tous les membres, y compris les membres hérités" sur toutes les pages de Widget. Cette liste est super, parce qu'elle a même les trucs hérités.
j'ai fait une recherche rapide pour "Focus" et j'ai trouvé tous les des choses liées à focus pour ce Widget.
Vous avez frappé de l'étrange se divise en QT, si vous regardez la documentation focusInEvent
n'est pas un slot, c'est une fonction protégée, vous pouvez l'ignorer si vous êtes à la mise en œuvre d'une sous-classe de votre widget. Si vous voulez juste attraper l'événement entrant dans votre widget vous pouvez utiliser QObject::installEventFilter
il vous permettra d'attraper toute sorte d'événements.
pour une raison étrange les développeurs de Trolltech ont décidé de propager des événements UI via deux avenues, signals / slots et QEvent
juste au cas où quelqu'un cherche deux QMainWindow focus change . Vous pouvez utiliser
if(e->type() == QEvent::WindowActivate)
{
//qDebug() << "Focus IN " << obj << e ;
}
QWidget::setFocus() est le slot, pas de signal. Vous pouvez vérifier si QLineEdit est en focus avec propriété focus. QLineEdit émet des signaux lorsque le texte est modifié ou édité, voir documentation.