Exemple d'édition de lignes
L'exemple d'édition de ligne démontre les nombreuses façons dont QLineEdit peut être utilisé, et montre les effets de diverses propriétés et validateurs sur l'entrée et la sortie fournies par l'utilisateur.

L'exemple consiste en une seule classe Window, qui contient une sélection d'éditions de lignes avec différentes contraintes d'entrée et des propriétés d'affichage qui peuvent être modifiées en sélectionnant des éléments dans des boîtes combinées. Le fait de présenter ces éléments ensemble aide les développeurs à choisir les propriétés appropriées à utiliser avec les modifications de ligne et permet de comparer facilement les effets de chaque validateur sur les entrées de l'utilisateur.
Définition de la classe Window
La classe Window hérite de QWidget et contient un constructeur et plusieurs slots :
class Window : public QWidget { Q_OBJECT public: Window(QWidget *parent = nullptr); public slots: void echoChanged(int); void validatorChanged(int); void alignmentChanged(int); void inputMaskChanged(int); void accessChanged(int); private: QLineEdit *echoLineEdit; QLineEdit *validatorLineEdit; QLineEdit *alignmentLineEdit; QLineEdit *inputMaskLineEdit; QLineEdit *accessLineEdit; };
Les slots sont utilisés pour mettre à jour le type de validateur utilisé pour une modification de ligne donnée lorsqu'un nouveau validateur a été sélectionné dans la boîte combobox associée. Les modifications de ligne sont stockées dans la fenêtre pour être utilisées dans ces slots.
Mise en œuvre de la classe de fenêtre
Le constructeur de Window est utilisé pour configurer les modifications de ligne, les validateurs et les comboboxes, pour connecter les signaux des comboboxes aux emplacements de la classe Window et pour organiser les widgets enfants dans les dispositions.
Nous commençons par construire un group box qui contient une étiquette, une boîte combinée et un éditeur de ligne afin de pouvoir démontrer la propriété QLineEdit::echoMode:
Window::Window(QWidget *parent) : QWidget(parent) { QGroupBox *echoGroup = new QGroupBox(tr("Echo")); QLabel *echoLabel = new QLabel(tr("Mode:")); QComboBox *echoComboBox = new QComboBox; echoComboBox->addItem(tr("Normal")); echoComboBox->addItem(tr("Password")); echoComboBox->addItem(tr("PasswordEchoOnEdit")); echoComboBox->addItem(tr("No Echo")); echoLineEdit = new QLineEdit; echoLineEdit->setPlaceholderText("Placeholder Text"); echoLineEdit->setFocus();
À ce stade, aucun de ces widgets n'a été organisé dans des présentations. Par la suite, les widgets echoLabel, echoComboBox et echoLineEdit seront placés dans une disposition verticale à l'intérieur du cadre echoGroup.
De même, nous construisons des cadres de groupe et des collections de widgets pour montrer les effets de QIntValidator et QDoubleValidator sur le contenu d'une ligne d'édition :
QGroupBox *validatorGroup = new QGroupBox(tr("Validator")); QLabel *validatorLabel = new QLabel(tr("Type:")); QComboBox *validatorComboBox = new QComboBox; validatorComboBox->addItem(tr("No validator")); validatorComboBox->addItem(tr("Integer validator")); validatorComboBox->addItem(tr("Double validator")); validatorLineEdit = new QLineEdit; validatorLineEdit->setPlaceholderText("Placeholder Text");
L'alignement du texte est démontré par un autre groupe de widgets :
QGroupBox *alignmentGroup = new QGroupBox(tr("Alignment")); QLabel *alignmentLabel = new QLabel(tr("Type:")); QComboBox *alignmentComboBox = new QComboBox; alignmentComboBox->addItem(tr("Left")); alignmentComboBox->addItem(tr("Centered")); alignmentComboBox->addItem(tr("Right")); alignmentLineEdit = new QLineEdit; alignmentLineEdit->setPlaceholderText("Placeholder Text");
QLineEdit L'alignement du texte est démontré par un autre groupe de widgets : input masks, qui ne permet à l'utilisateur que de taper des caractères dans l'édition de ligne en suivant une spécification simple. Nous construisons un groupe de widgets pour présenter une sélection de masques prédéfinis :
QGroupBox *inputMaskGroup = new QGroupBox(tr("Input mask")); QLabel *inputMaskLabel = new QLabel(tr("Type:")); QComboBox *inputMaskComboBox = new QComboBox; inputMaskComboBox->addItem(tr("No mask")); inputMaskComboBox->addItem(tr("Phone number")); inputMaskComboBox->addItem(tr("ISO date")); inputMaskComboBox->addItem(tr("License key")); inputMaskLineEdit = new QLineEdit; inputMaskLineEdit->setPlaceholderText("Placeholder Text");
Une autre caractéristique utile de QLineEdit est sa capacité à rendre son contenu en lecture seule. Cette propriété est utilisée pour contrôler l'accès à l'édition d'une ligne dans le groupe de widgets suivant :
QGroupBox *accessGroup = new QGroupBox(tr("Access")); QLabel *accessLabel = new QLabel(tr("Read-only:")); QComboBox *accessComboBox = new QComboBox; accessComboBox->addItem(tr("False")); accessComboBox->addItem(tr("True")); accessLineEdit = new QLineEdit; accessLineEdit->setPlaceholderText("Placeholder Text");
Maintenant que tous les widgets enfants ont été construits, nous connectons les signaux des comboboxes aux slots de l'objet Window:
connect(echoComboBox, &QComboBox::activated, this, &Window::echoChanged); connect(validatorComboBox, &QComboBox::activated, this, &Window::validatorChanged); connect(alignmentComboBox, &QComboBox::activated, this, &Window::alignmentChanged); connect(inputMaskComboBox, &QComboBox::activated, this, &Window::inputMaskChanged); connect(accessComboBox, &QComboBox::activated, this, &Window::accessChanged);
Chacune de ces connexions utilise le signal QComboBox::activated() qui fournit un entier au slot. Ce signal sera utilisé pour apporter efficacement des modifications à l'édition de ligne appropriée dans chaque emplacement.
Nous plaçons chaque boîte combinée, chaque modification de ligne et chaque étiquette dans une disposition pour chaque cadre, en commençant par la disposition du cadre echoGroup. Les autres dispositions sont construites de la même manière que la disposition de la boîte de groupe :
QGridLayout *echoLayout = new QGridLayout; echoLayout->addWidget(echoLabel, 0, 0); echoLayout->addWidget(echoComboBox, 0, 1); echoLayout->addWidget(echoLineEdit, 1, 0, 1, 2); echoGroup->setLayout(echoLayout);
Les autres dispositions sont construites de la même manière :
QGridLayout *validatorLayout = new QGridLayout; validatorLayout->addWidget(validatorLabel, 0, 0); validatorLayout->addWidget(validatorComboBox, 0, 1); validatorLayout->addWidget(validatorLineEdit, 1, 0, 1, 2); validatorGroup->setLayout(validatorLayout); QGridLayout *alignmentLayout = new QGridLayout; alignmentLayout->addWidget(alignmentLabel, 0, 0); alignmentLayout->addWidget(alignmentComboBox, 0, 1); alignmentLayout->addWidget(alignmentLineEdit, 1, 0, 1, 2); alignmentGroup-> setLayout(alignmentLayout); QGridLayout *inputMaskLayout = new QGridLayout; inputMaskLayout->addWidget(inputMaskLabel, 0, 0); inputMaskLayout->addWidget(inputMaskComboBox, 0, 1); inputMaskLayout->addWidget(inputMaskLineEdit, 1, 0, 1, 2); inputMaskGroup->setLayout(inputMaskLayout); QGridLayout *accessLayout = new QGridLayout; accessLayout->addWidget(accessLabel, 0, 0); accessLayout->addWidget(accessComboBox, 0, 1); accessLayout->addWidget(accessLineEdit, 1, 0, 1, 2); accessGroup->setLayout(accessLayout);
Enfin, nous plaçons chaque cadre dans une disposition de grille pour l'objet Window et définissons le titre de la fenêtre :
QGridLayout *layout = new QGridLayout; layout->addWidget(echoGroup, 0, 0); layout->addWidget(validatorGroup, 1, 0); layout->addWidget(alignmentGroup, 2, 0); layout->addWidget(inputMaskGroup, 0, 1); layout->addWidget(accessGroup, 1, 1); setLayout(layout); setWindowTitle(tr("Line Edits")); }
Les slots répondent aux signaux émis lorsque les combobox sont modifiés par l'utilisateur.
Lorsque la boîte combinée du cadre Echo est modifiée, le slot echoChanged() est appelé :
void Window::echoChanged(int index) { switch (index) { case 0: echoLineEdit->setEchoMode(QLineEdit::Normal); break; case 1: echoLineEdit->setEchoMode(QLineEdit::Password); break; case 2: echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit); break; case 3: echoLineEdit->setEchoMode(QLineEdit::NoEcho); break; } }
L'emplacement met à jour l'édition de ligne dans le même cadre pour utiliser un mode d'écho correspondant à l'entrée décrite dans la boîte combinée.
Lorsque la combobox du cadre Validator est modifiée, le slot validatorChanged() est appelé :
void Window::validatorChanged(int index) { switch (index) { case 0: validatorLineEdit->setValidator(nullptr); break; case 1: validatorLineEdit->setValidator(new QIntValidator( validatorLineEdit)); break; case 2: validatorLineEdit->setValidator(new QDoubleValidator(-999.0, 999.0, 2, validatorLineEdit)); break; } validatorLineEdit->clear(); }
Le slot crée un nouveau validateur à utiliser pour l'édition de ligne ou supprime le validateur en cours d'utilisation en appelant QLineEdit::setValidator() avec un pointeur à zéro. Dans ce cas, nous effaçons l'édition de ligne afin de nous assurer que le nouveau validateur dispose initialement d'une entrée valide pour travailler.
Lorsque la combobox du cadre Alignment est modifiée, le slot alignmentChanged() est appelé :
void Window::alignmentChanged(int index) { switch (index) { case 0: alignmentLineEdit->setAlignment(Qt::AlignLeft); break; case 1: alignmentLineEdit->setAlignment(Qt::AlignCenter); break; case 2: alignmentLineEdit->setAlignment(Qt::AlignRight); break; } }
Cela modifie la façon dont le texte est affiché dans l'édition de ligne pour correspondre à la description sélectionnée dans la boîte combinée.
Le slot inputMaskChanged() gère les modifications apportées à la boîte combinée du cadre Input Mask:
void Window::inputMaskChanged(int index) { switch (index) { case 0: inputMaskLineEdit->setInputMask(""); break; case 1: inputMaskLineEdit->setInputMask("+99 99 99 99 99;_"); break; case 2: inputMaskLineEdit->setInputMask("0000-00-00"); inputMaskLineEdit->setText("00000000"); inputMaskLineEdit->setCursorPosition(0); break; case 3: inputMaskLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#"); break; } }
Chaque entrée de la boîte combinée concernée est associée à un masque de saisie. Nous définissons un nouveau masque en appelant la fonction QLineEdit::setInputMask() avec une chaîne appropriée ; le masque est désactivé si une chaîne vide est utilisée.
Le slot accessChanged() gère les modifications apportées à la boîte combobox dans le cadre Access:
void Window::accessChanged(int index) { switch (index) { case 0: accessLineEdit->setReadOnly(false); break; case 1: accessLineEdit->setReadOnly(true); break; } }
Ici, nous associons simplement les entrées False et True de la boîte combinée aux valeurs false et true à transmettre à QLineEdit::setReadOnly(). Cela permet à l'utilisateur d'activer et de désactiver la saisie dans l'éditeur de ligne.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.