Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Павелъ от Апрель 02, 2017, 19:28



Название: Как убрать мерцающие каретки а полях ввода?
Отправлено: Павелъ от Апрель 02, 2017, 19:28
Доброго времени суток.

Разрабатываю графический интерфейс для своего приложения.
Понадобилось много полей ввода. Можно конечно было их сделать с помощью QTableWidget. Но, я сделал с помощью QLineEditов. И сейчас уже не хочется менять, так как написано много кода.
В приложении надо сделать так, что если пользователь удалил полностью текст в LineEdit и переместился на другое поле или вкладку, то поле автоматически заполнялось бы либо предыдущим значением, либо "0.0". Я сделал - "0.0", так как это легче.

Сначала для этого я пытался связать сигналы QLabel со своим слотом

Код:
void MainWindow::slotFinishedEdit(QWidget * wg)
{
    if(qobject_cast<LineEdit *>(wg)->text().count()<1)
qobject_cast<QLineEdit *>(wg)->setText("0.0");


}

Проблема оказалась в том, что подходящего сигнала у QLineEdit я не нашёл. Сигнал editingFinished() срабатывает только тогда, когда в поле есть текст. Поэтому пришлось наследовать класс QLineEdit и в событии

Код:
void LineEdit::focusOutEvent(QFocusEvent *)
{
    emit signalMouseOut();
}

посылать собственный сигнал.

Но после этого создалось такое впечатление, что каждый LineEdit живёт своей жизнью. После перехода в другое поле в старых остаются мигающие каретки. Причём текст вводится в текущем поле, как и надо.
Пробовал чистить фокус focusclear и т.д. Ничего не помогло - мигающие каретки.

Помогите либо избавиться от мигающих кареток, либо сделать так, чтобы после смены поля, в случае если в нём ничего нет, предыдущее заполнялось значением.

(http://s020.radikal.ru/i715/1704/3c/36c1d6f514cd.png) (http://radikal.ru)


Название: Re: Как убрать мерцающие каретки а полях ввода?
Отправлено: Павелъ от Апрель 02, 2017, 19:32
https://yadi.sk/d/sEue4d673GZzJz

Вот ссылка на сам проект. Главная форма реализована в MainWindow.cpp


Название: Re: Как убрать мерцающие каретки а полях ввода?
Отправлено: Old от Апрель 02, 2017, 19:37
А если так:
Код
C++ (Qt)
void LineEdit::focusOutEvent( QFocusEvent *ev )
{
   QLineEdit::focusOutEvent( ev );
   emit signalMouseOut();
}
 


Название: Re: Как убрать мерцающие каретки а полях ввода?
Отправлено: Павелъ от Апрель 02, 2017, 20:26
Спасибо, работает!


Название: Re: Как убрать мерцающие каретки а полях ввода?
Отправлено: Racheengel от Апрель 03, 2017, 11:43
С коннектами решение как-то кривенько смотрится :(
Можно было бы отнаследоваться от LineEdit и дописать нехватающий функционал.