Название: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Hero Sanya от Май 20, 2020, 13:50 У меня в программе куча полей qLineEdit.
У каждого поля, мне нужно перейти к слоту от изменения текста в них. Но так как полей много, очень много, чтобы не писать кучу однотипных методов, я просто создаю один единственный слот для обработки всех полей, которые будут обрабатывать сигналы изменения текста. Проблема заключается в том, что я не знаю что вставлять в качестве объекта обращения ui(на скриншоте это obj), т. е. мне нужно, чтобы то поле, что посылает сигнал, и обрабатывалось(я же не смогу изменить название поля в программе, когда она запущена). Вместо obj, должно стоять название поля qLineEdit, от которого идёт сигнал по идеи. Или sender возвращает что то другое(Я думаю, что он возвращает имя того, кто посылает сигнал)? Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Пантер от Май 20, 2020, 13:58 ui-> убери, сделай
obj->text().toDouble(&ok); Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Hero Sanya от Май 20, 2020, 14:00 ui-> убери, сделай obj->text().toDouble(&ok); Тогда обработка не происходит. Да, компиляция проходит, но ограничения на поля, из метода, не срабатывают(там если что, ограничения для ввода в поля до вещественных чисел). Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Пантер от Май 20, 2020, 14:18 Попробуй другой сигнал, там что-то было типа textEdited или вроде того.
Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: ViTech от Май 20, 2020, 15:51 ... (там если что, ограничения для ввода в поля до вещественных чисел). Если что, то для ограничения ввода в QLineEdit можно использовать QValidator (https://doc.qt.io/qt-5/qvalidator.html). Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Пантер от Май 20, 2020, 16:02 А можно QDoubleSpinBox :)
Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Hero Sanya от Май 20, 2020, 16:04 Попробуй другой сигнал, там что-то было типа textEdited или вроде того. Даже так не срабатывает. Да и потом, если я вместо obj пишу конкретное поле(например lineEdit_1), то всё нормально, функция делает что должна.Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Hero Sanya от Май 20, 2020, 16:05 ... (там если что, ограничения для ввода в поля до вещественных чисел). Если что, то для ограничения ввода в QLineEdit можно использовать QValidator (https://doc.qt.io/qt-5/qvalidator.html). Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Пантер от Май 20, 2020, 16:09 Перепроверяй, ты что-то делаешь не так. Сделай вывод в консоль через qDebug того, что тебе прилетает в функцию.
Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: kambala от Май 20, 2020, 17:02 если я вместо obj пишу конкретное поле(например lineEdit_1) на картинке используются не такие простые названия переменных, там всякие Lyner_1_1, может в этом и дело?и кстати вставлять код текстом куда лучше. Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Hero Sanya от Май 20, 2020, 19:25 если я вместо obj пишу конкретное поле(например lineEdit_1) на картинке используются не такие простые названия переменных, там всякие Lyner_1_1, может в этом и дело?и кстати вставлять код текстом куда лучше. То есть, программа сама должна узнавать, какое поле кинуло сигнал.Для этого я кинул скрин с сигналами, может я не правильно отправляю сигнал, или может сендер не так использую. Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: kambala от Май 20, 2020, 20:10 по тем кусочкам кода, которые видно, все написано правильно. Выкладывай тогда полный проект, может ошибка в другом месте :)
Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Hero Sanya от Май 21, 2020, 00:42 по тем кусочкам кода, которые видно, все написано правильно. Выкладывай тогда полный проект, может ошибка в другом месте :( Даааа, там очень много кода. Думаю, в итоге легче разобраться просто создавая кучу однотипных методов под каждое поле.В любом случае, я бы хотел знать, правильно ли я конекты записал(вначале он берёт поле, отслеживая с него сигнал о изменении, в (this), отправляя обрабатывать в слот(block_symbols_in_polya()). Отладчик кстати показал, что у меня тупо не входит в метод (block_symbols_in_polya(). Там не меняются переменные. Единственная причина, это неправильно написанный сендер или инициализация указателя, ну или, он вообще один раз слушает сигналы, сразу на старте программы и забывает про них. Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Пантер от Май 21, 2020, 07:29 У тебя что-то не так где-то в другом месте. Я тебе предлагаю создать новый проект, попытаться там воспроизвести эту проблему, приложить проект сюда, а мы посмотрим и подкорректируем тебя.
Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: tamplier от Май 21, 2020, 08:11 У меня в программе куча полей qLineEdit. У каждого поля, мне нужно перейти к слоту от изменения текста в них. Но так как полей много, очень много, чтобы не писать кучу однотипных методов, я просто создаю один единственный слот для обработки всех полей, которые будут обрабатывать сигналы изменения текста. Проблема заключается в том, что я не знаю что вставлять в качестве объекта обращения ui(на скриншоте это obj), т. е. мне нужно, чтобы то поле, что посылает сигнал, и обрабатывалось(я же не смогу изменить название поля в программе, когда она запущена). Вместо obj, должно стоять название поля qLineEdit, от которого идёт сигнал по идеи. Или sender возвращает что то другое(Я думаю, что он возвращает имя того, кто посылает сигнал)? Создаешь свой класс и наследуешь его от QLineEdit. И в этом классе можно определить слот и "приконнектить" его к нужному сигналу (этого же класса). Я бы так делал. Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: tamplier от Май 21, 2020, 08:34 Вот что-то вроде этого (небольшой полностью рабочий пример). Только я формы не дизайнером сделал. Надеюсь поможет.
myline.h: Код
myline.cpp: Код
mywidget.h: Код
mywidget.cpp: Код
main.cpp: Код
Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Пантер от Май 21, 2020, 08:52 В этом случае придется в дизайнере делать promote widget. И вообще, этот случай не стоит наследования.
Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: tamplier от Май 21, 2020, 09:28 В этом случае придется в дизайнере делать promote widget. И вообще, этот случай не стоит наследования. Сделал как смог. Сам еще новичок в Qt-программировании. Но, хоть какой-то рабочий пример, который отвечает на вопрос топикстартера. Просто зачастую, советы а-ля: "Ты делаешь совершенно неправильно" и "Гугл в помощь.", совершенно не помогают... Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Пантер от Май 21, 2020, 09:30 В этом случае придется в дизайнере делать promote widget. И вообще, этот случай не стоит наследования. Сделал как смог. Сам еще новичок в Qt-программировании. Но, хоть какой-то рабочий пример, который отвечает на вопрос топикстартера. Просто зачастую, советы а-ля: "Ты делаешь совершенно неправильно" и "Гугл в помощь.", совершенно не помогают... Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Mikhail от Май 21, 2020, 09:39 по тем кусочкам кода, которые видно, все написано правильно. Выкладывай тогда полный проект, может ошибка в другом месте :( Даааа, там очень много кода. Думаю, в итоге легче разобраться просто создавая кучу однотипных методов под каждое поле.В любом случае, я бы хотел знать, правильно ли я конекты записал(вначале он берёт поле, отслеживая с него сигнал о изменении, в (this), отправляя обрабатывать в слот(block_symbols_in_polya()). Отладчик кстати показал, что у меня тупо не входит в метод (block_symbols_in_polya(). Там не меняются переменные. Единственная причина, это неправильно написанный сендер или инициализация указателя, ну или, он вообще один раз слушает сигналы, сразу на старте программы и забывает про них. Неправильный connect [signal] void QLineEdit::textChanged(const QString &text) Нет сигнала QLineEdit::textChanged() без параметров, поэтому нет входа в слот по connect Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: tamplier от Май 21, 2020, 09:43 В этом случае придется в дизайнере делать promote widget. И вообще, этот случай не стоит наследования. Сделал как смог. Сам еще новичок в Qt-программировании. Но, хоть какой-то рабочий пример, который отвечает на вопрос топикстартера. Просто зачастую, советы а-ля: "Ты делаешь совершенно неправильно" и "Гугл в помощь.", совершенно не помогают... К сожалению код топикстартера не проверял... Но мне показалось не очень корректным, что он создал кучу коннектов, а если "куча полей" пополнится еще парочкой, то придется писать дополнительные коннекты... Вот и привел пример, исключающий эту проблему. На истину в последней инстанции не претендую :) Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: tamplier от Май 21, 2020, 09:47 по тем кусочкам кода, которые видно, все написано правильно. Выкладывай тогда полный проект, может ошибка в другом месте :( Даааа, там очень много кода. Думаю, в итоге легче разобраться просто создавая кучу однотипных методов под каждое поле.В любом случае, я бы хотел знать, правильно ли я конекты записал(вначале он берёт поле, отслеживая с него сигнал о изменении, в (this), отправляя обрабатывать в слот(block_symbols_in_polya()). Отладчик кстати показал, что у меня тупо не входит в метод (block_symbols_in_polya(). Там не меняются переменные. Единственная причина, это неправильно написанный сендер или инициализация указателя, ну или, он вообще один раз слушает сигналы, сразу на старте программы и забывает про них. Неправильный connect [signal] void QLineEdit::textChanged(const QString &text) Нет сигнала QLineEdit::textChanged() без параметров, поэтому нет входа в слот по connect Извиняюсь за оффтоп: Это лучший совет! ) Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Пантер от Май 21, 2020, 10:02 по тем кусочкам кода, которые видно, все написано правильно. Выкладывай тогда полный проект, может ошибка в другом месте :( Даааа, там очень много кода. Думаю, в итоге легче разобраться просто создавая кучу однотипных методов под каждое поле.В любом случае, я бы хотел знать, правильно ли я конекты записал(вначале он берёт поле, отслеживая с него сигнал о изменении, в (this), отправляя обрабатывать в слот(block_symbols_in_polya()). Отладчик кстати показал, что у меня тупо не входит в метод (block_symbols_in_polya(). Там не меняются переменные. Единственная причина, это неправильно написанный сендер или инициализация указателя, ну или, он вообще один раз слушает сигналы, сразу на старте программы и забывает про них. Неправильный connect [signal] void QLineEdit::textChanged(const QString &text) Нет сигнала QLineEdit::textChanged() без параметров, поэтому нет входа в слот по connect Код
Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Igors от Май 21, 2020, 11:09 Тогда обработка не происходит. Да, компиляция проходит, но ограничения на поля, из метода, не срабатывают(там если что, ограничения для ввода в поля до вещественных чисел). Как говорят буржуи "please be more concrete". Слот получает упр-е? Может не срабатывают валидаторы? (там фокус известный). И вместо textChanged, что зовется на каждый чих, лучше textEdited, и не париться с readOnlyФормулируйте так чтобы не возникало множества наводящих вопросов, цените свое и чужое время Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: kambala от Май 21, 2020, 17:53 ошибки о несуществующем сигнале/слоте разве не выводятся в лог приложения?
к тому же, было заявление от ТС Цитировать Да и потом, если я вместо obj пишу конкретное поле(например lineEdit_1), то всё нормально, функция делает что должна. значит вход в слот происходилНазвание: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Hero Sanya от Май 21, 2020, 23:10 Цитировать К сожалению код топикстартера не проверял... Но мне показалось не очень корректным, что он создал кучу коннектов, а если "куча полей" пополнится еще парочкой, то придется писать дополнительные коннекты... Вот и привел пример, исключающий эту проблему. На истину в последней инстанции не претендую :) Да, эта куча полей действительно пополнится новыми полями и как бы коннекты не так страшно было делать(просто копирование/вставка)+ они находятся в одном месте из-за чего их легко редактировать. Просто суть была в том, чтобы избежать создания однотипных методов с одним и тем же действием, вот я и решил свести их до одного метода.Название: Re: Обработать сигналы с qLineEdit. Автоматизировать обработку полей. Отправлено: Hero Sanya от Май 21, 2020, 23:15 Цитировать Блин, проглядел я это. Кстати, юзайте новый стиль коннектов, тогда и проблем будет меньше. Даааа, это то что нужно!!! Всё можно закрывать тему.Код
|