Beispiel für Zeilenbearbeitungen
Das Beispiel für Zeilenbearbeitungen demonstriert die vielfältigen Einsatzmöglichkeiten von QLineEdit und zeigt die Auswirkungen verschiedener Eigenschaften und Validatoren auf die vom Benutzer eingegebene Eingabe und Ausgabe.
Das Beispiel besteht aus einer einzigen Klasse Window
, die eine Auswahl von Zeileneditoren mit verschiedenen Eingabebedingungen und Anzeigeeigenschaften enthält, die durch Auswahl von Elementen aus Comboboxen geändert werden können. Die gemeinsame Darstellung dieser Eigenschaften hilft den Entwicklern bei der Auswahl geeigneter Eigenschaften für die Zeilenbearbeitung und erleichtert den Vergleich der Auswirkungen der einzelnen Validierer auf die Benutzereingabe.
Definition der Fensterklasse
Die Klasse Window
erbt QWidget und enthält einen Konstruktor und mehrere 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; };
Die Slots werden verwendet, um den Typ des für eine bestimmte Zeilenbearbeitung verwendeten Validators zu aktualisieren, wenn ein neuer Validator in der zugehörigen Combobox ausgewählt wurde. Die Zeilenbearbeitungen werden im Fenster zur Verwendung in diesen Slots gespeichert.
Implementierung der Fensterklasse
Der Window
Konstruktor wird verwendet, um die Zeilenbearbeitungen, Prüfer und Comboboxen einzurichten, Signale von den Comboboxen mit Slots in der Window
Klasse zu verbinden und die Child-Widgets in Layouts anzuordnen.
Wir beginnen mit der Konstruktion einer group box, die eine Beschriftung, eine Combobox und eine Zeilenbearbeitung enthält, um die Eigenschaft QLineEdit::echoMode zu demonstrieren:
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();
Zu diesem Zeitpunkt ist noch keines dieser Widgets in Layouts angeordnet. Zu einem späteren Zeitpunkt werden die Widgets echoLabel
, echoComboBox
und echoLineEdit
in einem vertikalen Layout innerhalb des Gruppenrahmens echoGroup
angeordnet.
Auf ähnliche Weise konstruieren wir Gruppenrahmen und Sammlungen von Widgets, um die Auswirkungen von QIntValidator und QDoubleValidator auf den Inhalt einer Bearbeitungszeile zu zeigen:
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");
Die Textausrichtung wird durch eine weitere Gruppe von Widgets demonstriert:
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 Die Widgets für die Textausrichtung unterstützen die Verwendung von input masks. Diese erlauben dem Benutzer nur die Eingabe von Zeichen in die Eingabezeile, die einer einfachen Spezifikation folgen. Wir konstruieren eine Gruppe von Widgets, um eine Auswahl von vordefinierten Masken zu demonstrieren:
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");
Eine weitere nützliche Eigenschaft von QLineEdit ist die Möglichkeit, seinen Inhalt schreibgeschützt zu machen. Diese Eigenschaft wird verwendet, um den Zugriff auf eine Zeilenbearbeitung in der folgenden Gruppe von Widgets zu steuern:
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");
Nachdem nun alle untergeordneten Widgets erstellt wurden, verbinden wir die Signale der Comboboxen mit den Slots im Window
Objekt:
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);
Jede dieser Verbindungen verwendet das Signal QComboBox::activated(), das eine Ganzzahl an den Slot liefert. Dies wird verwendet, um effizient Änderungen an der entsprechenden Zeilenbearbeitung in jedem Slot vorzunehmen.
Wir platzieren jedes Kombinationsfeld, jede Eingabezeile und jede Beschriftung in einem Layout für jeden Gruppenrahmen, beginnend mit dem Layout für den Gruppenrahmen echoGroup
:
QGridLayout *echoLayout = new QGridLayout; echoLayout->addWidget(echoLabel, 0, 0); echoLayout->addWidget(echoComboBox, 0, 1); echoLayout->addWidget(echoLineEdit, 1, 0, 1, 2); echoGroup->setLayout(echoLayout);
Die anderen Layouts werden auf die gleiche Weise erstellt:
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);
Schließlich platzieren wir jeden Gruppenrahmen in einem Rasterlayout für das Objekt Window
und setzen den Fenstertitel:
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")); }
Die Slots reagieren auf Signale, die ausgesendet werden, wenn die Comboboxen vom Benutzer geändert werden.
Wenn die Combobox für den Gruppenrahmen Echo geändert wird, wird der Slot echoChanged()
aufgerufen:
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; } }
Der Slot aktualisiert die Zeilenbearbeitung im gleichen Gruppenfeld, um einen Echo-Modus zu verwenden, der dem in der Combobox beschriebenen Eintrag entspricht.
Wenn die Combobox für den Gruppenrahmen Validator geändert wird, wird der Slot validatorChanged()
aufgerufen:
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(); }
Der Slot erstellt entweder einen neuen Validator für die Zeilenbearbeitung, oder er entfernt den verwendeten Validator durch den Aufruf von QLineEdit::setValidator() mit einem Null-Zeiger. In diesem Fall löschen wir den Zeileneditor, um sicherzustellen, dass der neue Validator anfangs eine gültige Eingabe erhält, mit der er arbeiten kann.
Wenn die Combobox für den Gruppenrahmen Alignment geändert wird, wird der Slot alignmentChanged()
aufgerufen:
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; } }
Dadurch wird die Art und Weise, wie der Text in der Zeilenbearbeitung angezeigt wird, an die in der Combobox ausgewählte Beschreibung angepasst.
Der Slot inputMaskChanged()
behandelt Änderungen an der Combobox im Gruppenrahmen 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; } }
Jeder Eintrag in der entsprechenden Combobox ist mit einer Eingabemaske verbunden. Wir setzen eine neue Maske, indem wir die Funktion QLineEdit::setInputMask() mit einem geeigneten String aufrufen; die Maske wird deaktiviert, wenn ein leerer String verwendet wird.
Der Slot accessChanged()
behandelt Änderungen an der Combobox im Gruppenrahmen Access:
void Window::accessChanged(int index) { switch (index) { case 0: accessLineEdit->setReadOnly(false); break; case 1: accessLineEdit->setReadOnly(true); break; } }
Hier verknüpfen wir einfach die Einträge False und True in der Combobox mit den Werten false
und true
, die an QLineEdit::setReadOnly() übergeben werden. So kann der Benutzer die Eingabe in die Zeilenbearbeitung aktivieren und deaktivieren.
© 2025 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.