Название: Сомнительное место в UI Отправлено: Igors от Апрель 22, 2018, 09:47 Добрый день
Есть график на котором рисуются контрольные точки которые могут быть выбраны рамкой (и подсвечены). А вот нажатие мышей на точку не делает ее "выбранной". Менять такой ф-ционал нельзя. Юзер просит по нажатию на точку показать в статус баре ее значение, чтобы можно было его редактировать. А при нажатии мышей в др место скрыть. Вроде разумно, но находится масса др мест где нужно также скрыть (напр сам график удален или сменился, точку замочили с клавы и.т.п) - и во все эти места надо вставлять злополучное скрытие edit box'а. Как-то "нездорово" получается, мелкий ф-ционал вызывает массу забот. Как это порешать? Может богатырской силой какого-то паттерна и все такое? Спасибо Название: Re: Сомнительное место в UI Отправлено: kambala от Апрель 22, 2018, 10:36 получится по сигналу destroyed выбранной точки скрывать edit box?
Название: Re: Сомнительное место в UI Отправлено: Igors от Апрель 22, 2018, 13:35 получится по сигналу destroyed выбранной точки скрывать edit box? Нет, точка - скромный эл-т контейнера, делать ее наследником QObject не с руки. Удаление полностью контролируется контейнером, там можно отловить, но опять-таки - это всего лишь одно место (из очень многих)Название: Re: Сомнительное место в UI Отправлено: ssoft от Апрель 23, 2018, 07:54 ... Может богатырской силой какого-то паттерна и все такое? Богатырский паттерн - единый контроллер данных. Единый объект, который имеет возможность управлять всеми данными - добавлять/удалять/выделять/и т.д., а также сигнализировать об изменениях. Тогда удаление точек может происходить только через экземпляр объекта контроллера, так как только он владеет данными. А edit box может быть незамедлительно оповещен об удалении точек из любого места любым способом с помощью получения соответствующего сигнала от контроллера. Название: Re: Сомнительное место в UI Отправлено: Igors от Апрель 23, 2018, 08:27 Тогда удаление точек может происходить только через экземпляр объекта контроллера, Ну так и есть, удалять может только контейнер - почему нельзя считать его "контроллером"? А edit box может быть незамедлительно оповещен об удалении точек из любого места любым способом с помощью получения соответствующего сигнала от контроллера. Ой. Это выходит из-за сущей мелочи в UI каждая точка пуляет сигналами? Та ну нафигЕсть такие (смутные) соображения. Ну если юзверь тыкнул в др место - отслеживаем явно и скрываем editBox. Иначе он видим пока точка рисуется в данном окне. "Давайте сделаем точку шаред пойнтером" (и потом подскоком weak) - ну это слишком жирно. Как бы в эту точку "вцепиться"? Название: Re: Сомнительное место в UI Отправлено: ssoft от Апрель 23, 2018, 11:51 Если вкладывает в понятие "контейнер" модель поведения, то это уже не просто контейнер в виде структуры хранения.
Контроллер может состоять не из одного контейнера, а иметь, например, несколько контейнеров, дополнительные структуры, флаги, списки и т.п. Назначение контроллера - обеспечить модель поведения, а не каким то определенным образом хранить данные. Например, модели Qt (QAbstractItemModel) являются контроллерами данных. Точки как раз не пуляют сигналами, а делает это контроллер, типа сигнала dataChanged(). Название: Re: Сомнительное место в UI Отправлено: Авварон от Апрель 23, 2018, 16:32 Например, модели Qt (QAbstractItemModel) являются контроллерами данных. Вообще-то, модели являются моделями:) Контроллер - это то, что реагирует на инпут от пользователя (QAbstractItemView в архитектуре Model-View) Название: Re: Сомнительное место в UI Отправлено: ssoft от Апрель 23, 2018, 17:26 Вообще-то, модели являются моделями:) Да). Я чего-то спросонья модель контроллером обозвал))). Пардонте. Название: Re: Сомнительное место в UI Отправлено: Igors от Апрель 24, 2018, 10:38 Ну вот и развернулась теоретическая дискуссия :) Контроллер то, контроллер се. Сомневаюсь что здесь он вообще имеет отношение к делу. Нужно поймать место в коде где можно удачно проверить editBox на валидность. Думаю такое место есть - это рисование точки которой сейчас посвящен editBox. Ну сама точка вряд ли, рисование ее запросто отсечет. А если так (псевдокод)
Код Рисование проверяет рисуется ли mContainer, валиден ли индекс и совпадает ли адрес. Что-то не прошло - испускается сигнал на скрытие editBox. Да, так я могу поймать ABA, поэтому на всякий случай надо еще и данные сравнить Сейчас знатоки скажут: это как же так, "голые" указатели и без всяких паттернов! Не-не, это не может быть правдой! Ну так попинайте Название: Re: Сомнительное место в UI Отправлено: Racheengel от Апрель 24, 2018, 13:34 А если edit box модально вызывать? Пока юзер сам его не скроет - дальше не пущать...
Название: Re: Сомнительное место в UI Отправлено: Igors от Апрель 25, 2018, 13:03 А если edit box модально вызывать? Пока юзер сам его не скроет - дальше не пущать... Ну такие рецепты помогают скорее доктору чем больному :) |