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


  • Moderators

    @Galilio

    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?


  • Moderators

    @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 von QRegularExpressionValidator



  • @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.


  • Moderators

    @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


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.