Название: Дескриптор параметра Отправлено: Igors от Июнь 08, 2020, 10:54 Добрый день
Есть ф-ция (псевдокод) Код Ф-ция возьмет значение из QLineEdit, выполнит все проверки, если все норм - запишет value, иначе вывалит сообщение об ошибке (поэтому нужен аргумент "name") В принципе ф-ционал нормальный, но хотелось бы его расширить и сделать использование более компактным. Как это сделать ? Спасибо Название: Re: Дескриптор параметра Отправлено: Пантер от Июнь 08, 2020, 11:12 Код И дальше передавай класс с нужной фнукциональностью. Название: Re: Дескриптор параметра Отправлено: Igors от Июнь 08, 2020, 17:19 Код И дальше передавай класс с нужной фнукциональностью. Код Терпимо, но длинновато (достаточно громоздко). Предлагается Код Возможно есть смысл хранить мапу <QLineEdit *, IValidatorUpdater *> в классе окна. Ну может и компактнее, но не особо. И ф-ционал IValidatorUpdater ограничен т.к. он не имеет указателя на данные и name. На первый взгляд тут много заманчивых обобщений, но как-то "не ложится". 1) Почему только QLineEdit? Попапок и чекбоксов тоже хватает. Но тогда придется делать извлечение из виджета всяко-разно. Напр чекбокс может соответствовать (в данных) bool или int или битовому флагу 2) Почему конкретный "float"? Конечно есть и int и double и разнообразные enum'ы. Template напрашивается, но тогда опять возня с извлечением: toInt или toDouble или как? 3) Ну и подача адреса данных неприятно режет глаз. Нужен public, положили на геттеры/сеттеры. Но они ведь у каждого класса данных свои, как обобщать? Поэтому часто приходится вызовы UpdateEditValue оборачивать (геттером в локальную, если вернула true то сеттер) Конечно все это можно пережить, но это неаккуратно. Как разложить все по полочкам? Название: Re: Дескриптор параметра Отправлено: Пантер от Июнь 08, 2020, 17:35 1. Ты можешь написать свой класс FloatUpdater
2. Определи основной абстрактный интерфейс, чтобы туда можно было и QWidget* передавать, и name 3. Опиши основную логику в UpdateEditValue и остальное отдай на откуп валидатору 4. Напиши базовый валидатор с основной функциональностью. Как-то так. Тут нужно отталкиваться от задачи, которая перед тобой стоит и от того, сколько всяких вариантов использования может быть. Я тебе дал направление, дальше думай сам. Название: Re: Дескриптор параметра Отправлено: Igors от Июнь 09, 2020, 10:10 1. Ты можешь написать свой класс FloatUpdater Эти 1, 2, 3, 4 - это "or" или "and"? Т.е. их надо все реализовать или выбрать на свой вкус ? (как-то не очень ясно)2. Определи основной абстрактный интерфейс, чтобы туда можно было и QWidget* передавать, и name 3. Опиши основную логику в UpdateEditValue и остальное отдай на откуп валидатору 4. Напиши базовый валидатор с основной функциональностью. Как-то так. Тут нужно отталкиваться от задачи, которая перед тобой стоит и от того, сколько всяких вариантов использования может быть. Я тебе дал направление, дальше думай сам. Задача самая банальная - в UI заполняются поля всяких структур, она хорошо знакома каждому кто делал хоть какое-то UI. В общем о чем я должен думать - так и не понял :) |