|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
|
|
Графический интерфейс, реализация14.04.2017, 01:53. Показов 8379. Ответов 30
Метки нет (Все метки)
Сейчас просто для себя решил попробовать сделать простой, но удобный и понятный графический интерфейс для МК на С++. Низкоуровневые вещи по заполнению экрана и отрисовке графических примитивов уже есть, вопрос в организации отдельных программных частей. Вот есть базовый абстрактный класс Widget от которого наследуют такие вещи как Button, Stydir, MsgBox, Switch и так далее. В Widget хранится информация и методы касательно размеров, положения, видимости и прочее. В остальных классах реализуются уже более специфичные вещи, зависящие от состояния. Но возник вопрос, должны ли такие классы содержать и методы, непосредственно отображающие объекты на экране? Или отрисовку правильнее возложить на отдельный класс, который будет вызывать перегруженные функции в зависимости от типа объекта? Помимо графики, если планируется сенсорный ввод, то где лучше разместить его обработку, в каждом классе или выделить для этого отдельный?
0
|
|
| 14.04.2017, 01:53 | |
|
Ответы с готовыми решениями:
30
База данных "учебный план специальности". GUI. Графический интерфейс. Пользовательский интерфейс Графический интерфейс Графический интерфейс |
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 18.04.2017, 14:17 | |
|
Каждый потомок Widget должен содержать перегружать виртуальную функцию, занимающуюся его отрисовкой. В библиотеки qt такая функция называется poymtIvimt. Это очень логично спросить у виджета, как его следует отрисовать. Конечно, этот метод можно реализовать и в виде внешней перегруженной функции, но смысла в этом нет. При этом данному методу не следует знать абсолютных координат, а работать с координатами виджета.
Обработка сенсорного ввода идет от целого к частному. Сначала интерфейс проходит по дереву виджетов и определяет, какой виджет получил нажатие. Определяет, необходимо ли уведомить виджет, что он получил нажатие. У виджета опять же вызывается соответствующий обработчик, которому в числе прочего передаются координаты нажатия в системе виджета. Я вот не знаю, как делать в случае, если виджет содержится в виджете (но этот случай в рамках простого оконного интерфейса можно вообще исключить). Следует ли передавать сигнал всем виджетам или последнему в дереве... Вообще, общая рекомендация моя такая. Есть замечательная библиотека Qt, откуда идеи можно черпать и черпать. Есть книга по Qt за авторством господина Шлее. Она, конечно, написана с точки зрения пользователя, а не программиста, но там все весьма прозрачно, если внимательно следить, откуда берется кролик. Просто посмотрите, как ваши вопросы реализованы в Qt по части интерфейса, максимально упростите и получите профит.
0
|
|
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 18.04.2017, 14:24 | |
|
Господа. Ну вы как всегда. Вопросы заданы конкретные, ответы - кто во что горазд... Ну сами понимаете...
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 18.04.2017, 14:47 | ||
Так оно и реализовано по алгоритмике. Может чуток по другому по стилю программирования, но алгоритмы те же. Так что я считаю, что на поставленный вопрос я ответил.
0
|
||
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 18.04.2017, 17:05 | |
|
Ваш ответ по теме. Глобально против вашего ответа я ничего не имею.
Но, хочу заметить, с педагогической точки зрения ссылки на код крайне малоэффективны. Код может быть дополнением, а не ответом. Для того, чтобы осилить чужой код требуется определенный уровень понимания. Если вопрос о структуре, то всегда лучше словами сказать. Но, это так... Мысли на тему.
0
|
|
|
0 / 0 / 0
Регистрация: 26.06.2015
Сообщений: 49
|
|
| 18.04.2017, 17:16 | |
|
Fobirki,
Подходов куча. Сейчас похожей задачей занимаюсь. Решил сделать 2 интерфейсных класса: 1. Для управления графическими объектами, строками и т.д. 2. Для управления драйвером экрана Для тача отдельный класс. Фрейм-буффер в виде списка с объектами + тач. Вывод на экран - итерация списка.
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 18.04.2017, 17:47 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 18.04.2017, 17:53 | |
|
... Не факт, что вопрошающий понимает, на какую задачу замахнулся.
Но, в любом случае, лучший ответ - это всегда смесь теории и практики. Я согласен на теорию без практики. Но практику без теории моя академическая сущность считает хеллоувордизмом в плохом смысле этого слова.
0
|
|
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
|
|
| 19.04.2017, 20:42 | |
|
Да я прям-таки и не замахиваюсь на что-то сильно сложное. Тем более, опыт реализации экранной сенсорной клавиатуры у меня уже есть, неплохо работает. Правда, на чистом Си и со структурами. Но вот поэтому я и хочу опробовать новый подход.
Попытка первая <Изображение удалено> Пока я немного поупражнялся с реализацией и понял, что мой изначальный вариант с объявлением объектов-драйверов экрана и тача в базовом классе как статичных членов (единых для всех виджетов на экране) выглядит прямо скажем не очень и приводит к костылям уже на раннем этапе. Хотя изначально это выглядело очень заманчиво: иметь в каждом классе-наследнике простые и понятные методы для определения собственной позиции и координат касания для последующей обработки. Очевидно, их придется выносить, но сколько всего они за собой потянут, я пока плохо представляю. Может быть, тогда все-таки заодно убрать отрисовку и взаимодействие с нажатиями из отдельных классов? В конце-концов, кнопка, слайдер и окошко с текстом просто хранят свое состояние, а уж выглядеть на экране они могут десятком разных способов. Насчет книг по Qt я открывал некоторые русскоязычные издания, но они действительно написаны больше как для пользователей и о внутренней структуре там упоминается лишь вскользь. Лучше было бы конечно что-типо "Дизайна и эволюции С++" Страуструпа, но такого вроде бы нет. Всем спасибо тут за советы, мне это интересно читать, как только будет что-то годное, я обязательно покажу.
0
|
|
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
| 20.04.2017, 11:44 | |
|
Да мы абстрактно беседуем.
Годная клавиатурка :).
0
|
|
|
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 136
|
|
| 20.04.2017, 12:20 | |
|
Так это тот самый игровой контроллер ?
0
|
|
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
|
||
| 20.04.2017, 14:06 | ||
0
|
||
| 20.04.2017, 14:06 | |
|
Помогаю со студенческими работами здесь
31
Графический интерфейс Графический интерфейс
Графический интерфейс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|