Russian Qt Forum
Март 28, 2024, 21:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как убрать мерцающие каретки а полях ввода?  (Прочитано 3633 раз)
Павелъ
Гость
« : Апрель 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 и т.д. Ничего не помогло - мигающие каретки.

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

Записан
Павелъ
Гость
« Ответ #1 : Апрель 02, 2017, 19:32 »

https://yadi.sk/d/sEue4d673GZzJz

Вот ссылка на сам проект. Главная форма реализована в MainWindow.cpp
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #2 : Апрель 02, 2017, 19:37 »

А если так:
Код
C++ (Qt)
void LineEdit::focusOutEvent( QFocusEvent *ev )
{
   QLineEdit::focusOutEvent( ev );
   emit signalMouseOut();
}
 
Записан
Павелъ
Гость
« Ответ #3 : Апрель 02, 2017, 20:26 »

Спасибо, работает!
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Апрель 03, 2017, 11:43 »

С коннектами решение как-то кривенько смотрится Грустный
Можно было бы отнаследоваться от LineEdit и дописать нехватающий функционал.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.075 секунд. Запросов: 22.