настройка QlineEdit в Qt

Я делаю поле имени, используя QlineEdit. Я хочу, чтобы запись в этом поле была введена таким образом, чтобы первый символ каждого слова всегда был в верхнем регистре. Я не знаю, как установить маску ввода для этого, может ли кто-нибудь помочь мне .. спасибо заранее ..


person Anjali    schedule 05.07.2011    source источник


Ответы (3)


Это просто быстрое решение, которое я придумал, и, конечно, есть лучшие решения (например, реализация собственного редактирования строки), но это работает, как я тестировал.

Это SLOT:

void main_window::on_line_edit_0_text_changed( QString text )
{
    QString tmp = text;

    tmp.truncate( 1 ); // tmp is now first char of your text
    tmp = tmp.toUpper();

    if( text.size() > 1 )
    {
        text.remove( 0, 1 );
        text = text.toLower();
        text.prepend( tmp );
        line_edit_0->setText( text );
    }
    else
    {
        line_edit_0->setText( tmp );
    }
}

Подключение:

connect( line_edit_0, SIGNAL( textChanged( QString ) ), this, SLOT( on_line_edit_0_text_changed( QString ) ) );
person Exa    schedule 06.07.2011

Я не уверен насчет inputMask, но вы можете сделать это, создав подкласс QValidator. , или вы можете использовать QRegExpValidator.

person Donotalo    schedule 05.07.2011
comment
Да, я бы сказал, подкласс QValidator и повторная реализация QValidator::fixup(). - person Frank Osterfeld; 05.07.2011

Вы можете создать подкласс QLineEdit и переопределить keyPressEvent. QValidator в первую очередь предназначен для запрета неверных входных данных, а не для создания хороших, но для этого простого случая, вероятно, подойдет fixup.

person spraff    schedule 05.07.2011