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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Обработать сигналы с qLineEdit. Автоматизировать обработку полей.  (Прочитано 8696 раз)
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« : Май 20, 2020, 13:50 »

У меня в программе куча полей qLineEdit.
У каждого поля, мне нужно перейти к слоту от изменения текста в них.
Но так как полей много, очень много, чтобы не писать кучу однотипных методов, я просто создаю один единственный слот для обработки всех полей, которые будут обрабатывать сигналы изменения текста.
Проблема заключается в том, что я не знаю что вставлять в качестве объекта обращения ui(на скриншоте это obj), т. е. мне нужно, чтобы то поле, что посылает сигнал, и обрабатывалось(я же не смогу изменить название поля в программе, когда она запущена).

Вместо obj, должно стоять название поля qLineEdit, от которого идёт сигнал по идеи. Или sender возвращает что то другое(Я думаю, что он возвращает имя того, кто посылает сигнал)?
« Последнее редактирование: Май 20, 2020, 13:53 от Hero Sanya » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 20, 2020, 13:58 »

ui-> убери, сделай

obj->text().toDouble(&ok);
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #2 : Май 20, 2020, 14:00 »

ui-> убери, сделай

obj->text().toDouble(&ok);

Тогда обработка не происходит. Да, компиляция проходит, но ограничения на поля, из метода, не срабатывают(там если что, ограничения для ввода в поля до вещественных чисел).
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Май 20, 2020, 14:18 »

Попробуй другой сигнал, там что-то было типа textEdited или вроде того.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #4 : Май 20, 2020, 15:51 »

... (там если что, ограничения для ввода в поля до вещественных чисел).

Если что, то для ограничения ввода в QLineEdit можно использовать QValidator.
Записан

Пока сам не сделаешь...
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Май 20, 2020, 16:02 »

А можно QDoubleSpinBox Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #6 : Май 20, 2020, 16:04 »

Попробуй другой сигнал, там что-то было типа textEdited или вроде того.
Даже так не срабатывает. Да и потом, если я вместо obj пишу конкретное поле(например lineEdit_1), то всё нормально, функция делает что должна.
Записан
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #7 : Май 20, 2020, 16:05 »

... (там если что, ограничения для ввода в поля до вещественных чисел).

Если что, то для ограничения ввода в QLineEdit можно использовать QValidator.
Да, я знаю, просто потом планируются необычные ограничения для полей, какие конкретно не знаю, поэтому через него не получится.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Май 20, 2020, 16:09 »

Перепроверяй, ты что-то делаешь не так. Сделай вывод в консоль через qDebug того, что тебе прилетает в функцию.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #9 : Май 20, 2020, 17:02 »

если я вместо obj пишу конкретное поле(например lineEdit_1)
на картинке используются не такие простые названия переменных, там всякие Lyner_1_1, может в этом и дело?

и кстати вставлять код текстом куда лучше.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #10 : Май 20, 2020, 19:25 »

если я вместо obj пишу конкретное поле(например lineEdit_1)
на картинке используются не такие простые названия переменных, там всякие Lyner_1_1, может в этом и дело?

и кстати вставлять код текстом куда лучше.
Нет, не в этом. Дело в том, что мы не обращаемся к ui, то есть к графическому интерфейсу. Нужно обратится к ui, от него обратится к конкретному объекту и сделать конкретное дело. В моём случае, я не могу обратится к конкретному объекту, мне нужно чтобы программа сама поняла к какому объекту ей нужно обратится.Я не знаю как ей это дать понять. Я читал документацию и нашёл какой то sender, который по описанию вроде как именно это и делает. Узнал как его использовать. Однако полученный объект не пропускает компилятор. Здесь мне уже успели подсказать. что можно убрать ui. Теперь я понял, что в таком случае, мы будем применять изменения к объекту, которая переменная, а не поле в программе. Такое компилятор пропускает, но такой код не имеет смысла. Вот в чём проблема.
То есть, программа сама должна узнавать, какое поле кинуло сигнал.Для этого я кинул скрин с сигналами, может я не правильно отправляю сигнал, или может сендер не так использую.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #11 : Май 20, 2020, 20:10 »

по тем кусочкам кода, которые видно, все написано правильно. Выкладывай тогда полный проект, может ошибка в другом месте Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #12 : Май 21, 2020, 00:42 »

по тем кусочкам кода, которые видно, все написано правильно. Выкладывай тогда полный проект, может ошибка в другом месте Грустный
Даааа, там очень много кода. Думаю, в итоге легче разобраться просто создавая кучу однотипных методов под каждое поле.

В любом случае, я бы хотел знать, правильно ли я конекты записал(вначале он берёт поле, отслеживая с него сигнал о изменении, в (this), отправляя обрабатывать в слот(block_symbols_in_polya()). Отладчик кстати показал, что у меня тупо не входит в метод (block_symbols_in_polya(). Там не меняются переменные. Единственная причина, это неправильно написанный сендер или инициализация указателя, ну или, он вообще один раз слушает сигналы, сразу на старте программы и забывает про них.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Май 21, 2020, 07:29 »

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
tamplier
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #14 : Май 21, 2020, 08:11 »

У меня в программе куча полей qLineEdit.
У каждого поля, мне нужно перейти к слоту от изменения текста в них.
Но так как полей много, очень много, чтобы не писать кучу однотипных методов, я просто создаю один единственный слот для обработки всех полей, которые будут обрабатывать сигналы изменения текста.
Проблема заключается в том, что я не знаю что вставлять в качестве объекта обращения ui(на скриншоте это obj), т. е. мне нужно, чтобы то поле, что посылает сигнал, и обрабатывалось(я же не смогу изменить название поля в программе, когда она запущена).

Вместо obj, должно стоять название поля qLineEdit, от которого идёт сигнал по идеи. Или sender возвращает что то другое(Я думаю, что он возвращает имя того, кто посылает сигнал)?

Создаешь свой класс и наследуешь его от QLineEdit. И в этом классе можно определить слот и "приконнектить" его к нужному сигналу (этого же класса). Я бы так делал.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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