Я разрабатываю графический интерфейс для микроконтроллера mbed на С++, и у меня есть несколько проблем.
Ситуация такова: разные классы виджетов (кнопка, слайдер...) с виртуальной родительской функцией виджета. Затем макет виртуальной функции с такими классами, как (gridLayout, ...). Макет имеет такие функции, как layout.add(*widget) для добавления указателей виджетов к вектору. Затем у меня есть функция контроллера, которая обрабатывает события касания и использует текущий активный макет, чтобы проверить, какой правильный виджет находится в макете в координатах x, y касания.
Теперь я хочу добавить указатель, указывающий на макет в классе виджетов, чтобы класс контроллера мог изменить активный макет, если это необходимо. Существует также указатель функции, поэтому контроллер может запускать определенную функцию при использовании виджета.
Теперь проблема: я хотел бы сделать что-то вроде этого:
Button::Button(char* text_, int color_, void *function_, Layout *layout_): text(text_), color(color_), function(function_), layout(layout_){}
Но тогда мне нужно включить класс макета, а класс макета уже включает класс виджета --> error! Как это сделать проще всего? Я уже пробовал указатели void*, а затем статическое приведение к макету, но это не сработало.
Мне также нужно включить класс TFT в каждый виджет и макет, как проще всего это сделать? Теперь у меня просто есть Display.h с ним:
#ifndef DISPLAY_H
#define DISPLAY_H
static SPI_TFT Screen(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"Screen");
#endif
Но я не думаю, что это правильный способ сделать что-то подобное.
Большое спасибо за Вашу помощь!
void *
радикально различается в двух языках. - person   schedule 26.01.2014class Layout;
) - person t.niese   schedule 26.01.2014Screen
- это глобальный объект, и они объявляются с помощьюextern
(и определяются без чего-либо). Итак,extern SPI_TFT Screen;
в заголовке иSPI_TFT Screen(LCD_SDI, ...)
в one.cpp
. Сstatic
у вас есть разные объекты в каждой единице компиляции (посколькуstatic
означает, что вы хотите, чтобы вещь была локальной для единицы компиляции). - person Jan Hudec   schedule 26.01.2014