Выделите текст QLineEdit в фокусе - PullRequest
13 голосов
/ 08 августа 2010

Я создал диалог, используя QtDesigner.В диалоге есть объект QLineEdit с некоторым содержимым по умолчанию.Когда диалоговое окно инициализируется и фокус переходит на QLineEdit, я хочу, чтобы содержимое по умолчанию выбиралось автоматически, поэтому, как только пользователь начнет писать, предыдущее содержимое будет перезаписано.РЕДАКТИРОВАТЬ:

В конструкторе:

dialog->accept(); 

и

connect( dialog, SIGNAL(accepted()), QlineObj, SLOT( selectAll() ) );

Ответы [ 3 ]

9 голосов
/ 08 августа 2010

Вызов

lineEdit->selectAll();

после установки текста по умолчанию. (Возможно, в конструкторе диалогов.)

7 голосов
/ 05 февраля 2015

Существует более простой способ получить почти такое же поведение, а именно установить содержимое по умолчанию, используя setPlaceholderText () вместо setText (). Это покажет содержимое по умолчанию, выделенное серым цветом, и как только QLineEdit получит фокус, оно исчезнет.

5 голосов
/ 12 августа 2018

Это более старый вопрос, но, тем не менее, я попал сюда в поисках решения именно этой проблемы.Это может быть решено следующим образом:

Создайте класс, полученный из QLineEdit и переопределите focusInEvent в заголовке:

virtual void focusInEvent(QFocusEvent *event) override;

Затем реализуйте его так:

void MyLineEdit::focusInEvent(QFocusEvent *event)
{
    // First let the base class process the event
    QLineEdit::focusInEvent(event);
    // Then select the text by a single shot timer, so that everything will
    // be processed before (calling selectAll() directly won't work)
    QTimer::singleShot(0, this, &QLineEdit::selectAll);
}

На всякий случай, если кто-то еще задается вопросом, как это можно сделать; -)

...