Easyelectronics.ru

Электроника для всех
Текущее время: 19 июл 2018, 22:38

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 19 апр 2017, 18:34 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
Mirmik писал(а):
Ваш ответ по теме. Глобально против вашего ответа я ничего не имею.

Но, хочу заметить, с педагогической точки зрения ссылки на код крайне малоэффективны. Код может быть дополнением, а не ответом. Для того, чтобы осилить чужой код требуется определенный уровень понимания. Если вопрос о структуре, то всегда лучше словами сказать.

Но, это так... Мысли на тему.

Согласен, но если чел захотел создать GUI на интерфейсах, то стоит все же думать, что у него есть этот определенный уровень понимания. А если его нет, то и описание структуры словами тоже мало чего даст.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 19 апр 2017, 18:40 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 750
... Не факт, что вопрошающий понимает, на какую задачу замахнулся.
Но, в любом случае, лучший ответ - это всегда смесь теории и практики. Я согласен на теорию без практики. Но практику без теории моя академическая сущность считает хеллоувордизмом в плохом смысле этого слова.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 20 апр 2017, 21:29 
Старожил

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1159
Откуда: void
Да я прям-таки и не замахиваюсь на что-то сильно сложное. Тем более, опыт реализации экранной сенсорной клавиатуры у меня уже есть, неплохо работает. Правда, на чистом Си и со структурами. Но вот поэтому я и хочу опробовать новый подход.

Show Попытка первая


Пока я немного поупражнялся с реализацией и понял, что мой изначальный вариант с объявлением объектов-драйверов экрана и тача в базовом классе как статичных членов (единых для всех виджетов на экране) выглядит прямо скажем не очень и приводит к костылям уже на раннем этапе. Хотя изначально это выглядело очень заманчиво: иметь в каждом классе-наследнике простые и понятные методы для определения собственной позиции и координат касания для последующей обработки. Очевидно, их придется выносить, но сколько всего они за собой потянут, я пока плохо представляю. Может быть, тогда все-таки заодно убрать отрисовку и взаимодействие с нажатиями из отдельных классов? В конце-концов, кнопка, слайдер и окошко с текстом просто хранят свое состояние, а уж выглядеть на экране они могут десятком разных способов.

Насчет книг по Qt я открывал некоторые русскоязычные издания, но они действительно написаны больше как для пользователей и о внутренней структуре там упоминается лишь вскользь. Лучше было бы конечно что-типо "Дизайна и эволюции С++" Страуструпа, но такого вроде бы нет.

Всем спасибо тут за советы, мне это интересно читать, как только будет что-то годное, я обязательно покажу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 21 апр 2017, 12:31 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 750
Да мы абстрактно беседуем.

Годная клавиатурка :).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 21 апр 2017, 13:07 
Старожил
Аватара пользователя

Зарегистрирован: 09 июн 2016, 13:49
Сообщения: 263
Откуда: Севастополь
Так это тот самый игровой контроллер ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 21 апр 2017, 14:53 
Старожил

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1159
Откуда: void
-ALS- писал(а):
Так это тот самый игровой контроллер ?

Да, фотку взял из той же темы, просто чтобы лишний раз не фотографировать. С тех пор проект немного разросся и нужно вот его как-то систематизировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 31 окт 2017, 20:30 
Старожил

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1159
Откуда: void
Show Попытка вторая (плохое качество)


Сам код расположен тут: https://os.mbed.com/users/Faberge/code/F469_DEMO/

Стандартные виджеты в папочке Widgets, сам код для тестовой программы в user. В программе создается объект класса Screen, которому передаются указатели на различные созданные объекты базового класса и номер перехода на следующий экран (если есть, всего три экрана). Выглядит как-то так:

Код:
void createSwitchScreen(Screen *scr)
{
    scr -> reset(LCD_COLOR_BLACK);
    scr -> add(new Textbox(320, 5, LCD_COLOR_BLACK, "Switch Demo"));
             
    /* Create switches */
    scr -> add(new Switch(10, 20, LCD_COLOR_BLUE, toggleBlueLED));
    scr -> add(new Switch(10, 100, LCD_COLOR_RED, toggleRedLED));
    scr -> add(new Switch(10, 180, LCD_COLOR_ORANGE, toggleOrangeLED));
    scr -> add(new Switch(10, 260, LCD_COLOR_GREEN, toggleGreenLED));

    scr -> exitOnWithCode(new Button(10, 390, LCD_COLOR_DARKCYAN, "BTN"), NEW_BUTTON_SCREEN);
    scr -> exitOnWithCode(new Button(720, 390, LCD_COLOR_DARKCYAN, "TEXT"), NEW_TEXT_SCREEN);

    HAL_Delay(300);
}


Но мне не нравится, что это получаются функции, а по-хорошему должны быть методы. Буду рад комментариям по коду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 01 ноя 2017, 16:55 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 750
Не совсем понял, что вы хотите за методы получить, но возможно вам нужна такая форма:

Код:
class SwitchScreen : public Screen {
public:
    Button* btn;
    Button* text;

    SwitchScreen() {
        reset(LCD_COLOR_BLACK);
        add(new Textbox(320, 5, LCD_COLOR_BLACK, "Switch Demo"));
             
        /* Create switches */
        add(new Switch(10, 20, LCD_COLOR_BLUE, toggleBlueLED));
        add(new Switch(10, 100, LCD_COLOR_RED, toggleRedLED));
        add(new Switch(10, 180, LCD_COLOR_ORANGE, toggleOrangeLED));
        add(new Switch(10, 260, LCD_COLOR_GREEN, toggleGreenLED));
   
        btn = new Button(10, 390, LCD_COLOR_DARKCYAN, "BTN");
        text = new Button(720, 390, LCD_COLOR_DARKCYAN, "TEXT");

        add(btn);
        add(text);
    }

    void setBtnHandler(... ???) {
        btn->setHandler(...???);
    }   

    void setTextHandler(... ???) {
        text->setHandler(...???);
    }     
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 01 ноя 2017, 17:47 
Старожил

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1159
Откуда: void
А это не слишком накладно получается по ресурсам, для каждого экрана создавать свой собственный класс. Тем более если по большинству требуется только один экземпляр?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический интерфейс, реализация
СообщениеДобавлено: 01 ноя 2017, 18:53 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 750
Нет... Количество генерируемого кода не возрастёт.
(Во всяком случае не из-за замены функции на конструктор. Нет особой разницы, вызывается конструктор или функция....)

На самом деле, это довольно типично наследоваться от базовых виджетов. Иначе говоря, обычно так и делают...
Семантика при этом совершенно не меняется. Формально это просто синтаксический сахар, который, впрочем, позволяет упорядочить компоненты.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB