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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сомнительное место в UI  (Прочитано 9164 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 22, 2018, 09:47 »

Добрый день

Есть график на котором рисуются контрольные точки которые могут быть выбраны рамкой (и подсвечены). А вот нажатие мышей на точку не делает ее "выбранной". Менять такой ф-ционал нельзя.

Юзер просит по нажатию на точку показать в статус баре ее значение, чтобы можно было его редактировать. А при нажатии мышей в др место скрыть. Вроде разумно, но находится масса др мест где нужно также скрыть (напр сам график удален или сменился, точку замочили с клавы и.т.п) - и во все эти места надо вставлять злополучное скрытие edit box'а. Как-то "нездорово" получается, мелкий ф-ционал вызывает массу забот. Как это порешать?  Может богатырской силой какого-то паттерна и все такое?

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

Сообщений: 4724



Просмотр профиля WWW
« Ответ #1 : Апрель 22, 2018, 10:36 »

получится по сигналу destroyed выбранной точки скрывать edit box?
Записан

Изучением 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
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 22, 2018, 13:35 »

получится по сигналу destroyed выбранной точки скрывать edit box?
Нет, точка - скромный эл-т контейнера, делать ее наследником QObject не с руки. Удаление полностью контролируется контейнером, там можно отловить, но опять-таки - это всего лишь одно место (из очень многих)
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 574


Просмотр профиля
« Ответ #3 : Апрель 23, 2018, 07:54 »

... Может богатырской силой какого-то паттерна и все такое?

Богатырский паттерн - единый контроллер данных. Единый объект, который имеет возможность управлять всеми данными - добавлять/удалять/выделять/и т.д., а также сигнализировать об изменениях.
Тогда удаление точек может происходить только через экземпляр объекта контроллера, так как только он владеет данными. А edit box может быть незамедлительно оповещен об удалении точек из любого места любым способом с помощью получения соответствующего сигнала от контроллера.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 23, 2018, 08:27 »

Тогда удаление точек может происходить только через экземпляр объекта контроллера,
Ну так и есть, удалять может только контейнер - почему нельзя считать его "контроллером"?

А edit box может быть незамедлительно оповещен об удалении точек из любого места любым способом с помощью получения соответствующего сигнала от контроллера.
Ой. Это выходит из-за сущей мелочи в UI каждая точка пуляет сигналами? Та ну нафиг

Есть такие (смутные) соображения. Ну если юзверь тыкнул в др место - отслеживаем явно и скрываем editBox. Иначе он видим пока точка рисуется в данном окне. "Давайте сделаем точку шаред пойнтером" (и потом подскоком weak) - ну это слишком жирно. Как бы в эту точку "вцепиться"?
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 574


Просмотр профиля
« Ответ #5 : Апрель 23, 2018, 11:51 »

Если вкладывает в понятие "контейнер" модель поведения, то это уже не просто контейнер в виде структуры хранения.
Контроллер может состоять не из одного контейнера, а иметь, например, несколько контейнеров, дополнительные структуры, флаги, списки и т.п.
Назначение контроллера - обеспечить модель поведения, а не каким то определенным образом хранить данные.
Например, модели Qt (QAbstractItemModel) являются контроллерами данных.

Точки как раз не пуляют сигналами, а делает это контроллер, типа сигнала dataChanged().
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #6 : Апрель 23, 2018, 16:32 »

Например, модели Qt (QAbstractItemModel) являются контроллерами данных.

Вообще-то, модели являются моделями:)
Контроллер - это то, что реагирует на инпут от пользователя (QAbstractItemView в архитектуре Model-View)
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 574


Просмотр профиля
« Ответ #7 : Апрель 23, 2018, 17:26 »

Вообще-то, модели являются моделями:)

Да). Я чего-то спросонья модель контроллером обозвал))). Пардонте.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Апрель 24, 2018, 10:38 »

Ну вот и развернулась теоретическая дискуссия Улыбающийся Контроллер то, контроллер се. Сомневаюсь что здесь он вообще имеет отношение к делу. Нужно поймать место в коде где можно удачно проверить editBox на валидность. Думаю такое место есть - это рисование точки которой сейчас посвящен editBox. Ну сама точка вряд ли, рисование ее запросто отсечет. А если так (псевдокод)
Код
C++ (Qt)
struct СEdtPointLocator {
const Container * mContainer;  // контейнер точки
int mIndex;             // индекс точки  
const CDataPoint * mPoint;  // адрес точки
const CData & mEditData;   // см ниже
};
 
Рисование проверяет рисуется ли mContainer, валиден ли индекс и совпадает ли адрес. Что-то не прошло - испускается сигнал на скрытие editBox. Да, так я могу поймать ABA, поэтому на всякий случай надо еще и данные сравнить

Сейчас знатоки скажут: это как же так, "голые" указатели и без всяких паттернов! Не-не, это не может быть правдой! Ну так попинайте
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #9 : Апрель 24, 2018, 13:34 »

А если edit box модально вызывать? Пока юзер сам его не скроет - дальше не пущать...
Записан

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 не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 25, 2018, 13:03 »

А если edit box модально вызывать? Пока юзер сам его не скроет - дальше не пущать...
Ну такие рецепты помогают скорее доктору чем больному  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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