Solved In einen QlineEdit die ersten 2 Buchstaben dürfen nicht gelöscht werden
-
Hallo Zusammen,
ich möchte in einen QlineEdit verhindert, dass die zwei ersten Buchtstaben nicht gelöscht werden können.
Wie kann ich das tun?danke in voraus
-
QLineEdit* lineEdit = .... lineEdit->setText("XXX"); // text should always start with "XXX" lineEdit->setValidator( new QRegularExpressionValidator(QRegularExpression("^[X]{3}.*"), lineEdit ) ); // "XXX" followed by arbitrary characters
-
Danke
und wenn ich Qt 4 habe? -
@Galilio said in In einen QlineEdit die ersten 2 Buchstaben dürfen nicht gelöscht werden:
und wenn ich Qt 4 habe?
dann
QRegExpValidator
anstelle vonQRegularExpressionValidator
-
@raven-worx
Ich kann aber trotzdem diese Buchstaben löschen und das will ich unbedingt verhindert.
Diese Buchstaben varieren sich ja nachdem in welchen Status die SW sich befindet. -
@Galilio
Ah ja, habe vergessen, dass der Validator ja auch einen Intermediate state hat :/Versuch mal folgendes:
class MyValidator : public QValidator { Q_OBJECT Q_PROPERTY( QString prefix READ prefix WRITE setPrefix ) public: MyValidator( const QString & prefix, QLineEdit* lineEdit ) : QValidator(lineEdit), m_LineEdit(lineEdit) { this->setPrefix(prefix); } virtual QValidator::State validate(QString &input, int &pos) const Q_DECL_OVERRIDE { return input.startsWith( m_Prefix ) ? QValidator::Acceptable : QValidator::Invalid; } QString prefix() const { return m_Prefix; } void setPrefix(const QString & prefix) { if( m_Prefix != prefix ) { // update old prefix in lineedit QString text = m_LineEdit->text(); if( text.isEmpty() ) m_LineEdit->setText( prefix ); else m_LineEdit->setText( text.replace( 0, m_Prefix .length(), prefix ) ); m_Prefix = prefix; emit changed(); } } private: QLineEdit* m_LineEdit; QString m_Prefix; };
Beispiel:
QLineEdit* lineEdit = .... lineEdit->setValidator( new MyValidator("XX", lineEdit ) );
Wann immer sich jetzt der Prefix in der SW ändern sollte, ruft du einfach
setPrefix("YY")
auf, und das LineEdit widget sollte sich ebenfalls korrigieren. -
vielen Dank