Dans Qt, lorsqu'un widget reçoit le focus, comment peut-il recevoir une notification à ce sujet afin que je puisse exécuter du code personnalisé? Y a-t-il un signal ou un événement pour cela?
Vous pouvez ajouter en event filter
.
Voici un exemple d'application écrite avec QtCreator . Ce formulaire a QComboBox named 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 programmation WYSIWYG.
Faites-le en C++:
class LineEdit : public QLineEdit
{
virtual void focusInEvent( QFocusEvent* )
{}
};
Un signal "focusChanged" est envoyé lorsque la focalisation change, introduit dans Qt 4.1.
Il a deux arguments, le widget qui perd le focus et celui qui gagne le focus:
void QApplication::focusChanged(QWidget * old, QWidget * now)
Le moyen le plus simple consiste à connecter un emplacement au signal QApplication :: focusChanged.
Vous avez touché à des fractionnements étranges dans QT. Si vous consultez la documentation, focusInEvent
n’est pas un emplacement, il s’agit d’une fonction protégée. Vous pouvez la remplacer si vous implémentez 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 permet d’attraper tout type d’événement.
Pour une raison quelconque, les développeurs de Trolltech ont décidé de propager les événements d'interface utilisateur via deux avenues, signaux/slots et QEvent
Je devrais jouer avec, mais en regardant la documentation QT, il y a un "focusInEvent". Ceci est un gestionnaire d'événement.
Voici comment vous trouvez des informations sur .... Ouvrez "QT Assistant". Allez à l'index. Mettez dans un "QLineEdit". Il existe un lien très utile appelé "Liste de tous les membres, y compris les membres hérités" sur toutes les pages du widget. Cette liste est excellente, car elle contient même les éléments hérités.
J'ai fait une recherche rapide pour "Focus" et j'ai trouvé toutes les informations relatives à la focalisation de ce widget.
Juste au cas où quelqu'un cherche deux focus QMainWindow changer. Vous pouvez utiliser
if(e->type() == QEvent::WindowActivate)
{
//qDebug() << "Focus IN " << obj << e ;
}
QWidget :: setFocus () est une fente, pas un signal. Vous pouvez vérifier si QLineEdit est actif/avec la propriété focus . QLineEdit émet des signaux lorsque le texte est modifié ou modifié, voir la documentation.