У меня возникли проблемы с доступом к объекту или его методам в fltk. У меня есть класс с именем MyWindow, который является дочерним классом Fl_Window. , так что в основном я хотел бы использовать объект, который либо объявлен int main, либо Mywindow в приватном разделе. Моя проблема в том, что я не могу так использовать. Это позволяет мне использовать объект, если он объявлен глобальным. Могу ли я как-то поместить его в кучу, как это: Classname * pointer = new Classname(); ? ЕСЛИ я могу, где я могу это сделать? Как бы работала функция обратного вызова, если мне нужен этот объект или его функции в обратном вызове? Должен ли я использовать указатель на него в аргументах обратного вызова? позволяет сказать, что я хочу нажать кнопку, и мне нужно что-то сделать с объектом и изменить значение. много вопросов, которые я знаю, я действительно потерян. Может кто-нибудь просто укажет меня в правильном направлении? Спасибо! :)где объявить объект для его использования (fltk)
0
A
ответ
0
Простой случай для передачи данных в графическом интерфейсе
class MyData
{
// The data model
};
class MyWindow: public FL_Window
{
MyData* m_data;
public:
void Data(MyData* data) { m_data = data; }
...
};
int main()
{
MyWindow gui;
MyData data;
// Tell the gui about the data
gui.Data(data);
...
// Setup the dialog
gui.begin();
...
gui.end();
gui.show();
return FL::run();
}
Для обратных вызовов, сделать это в два этапа
class NeedingACallback
{
public:
void Setup()
{
...
FL_xxx* w = new FL_xxx(xpos, ypos, wid, hgt, name);
...
// v Pass the instance to the static
w->callback(_EventCB, this);
}
// The callback
static void _EventCB(FL_Widget* w, void* client)
{
// Convert the void* back to the instance
NeedingACallback* self = reinterpret_cast<NeedingACallback*>(client);
self->EventCB();
}
// Make life simple so you don't have to put self-> in front of
// all the instance data accessed
void EventCB()
{
// Callback for this instance of the class
}
};
EDIT Это звучит, как у вас несколько экземпляров данные. Альтернативный метод состоит в том, чтобы иметь данные в качестве ссылки. Это должно быть сделано в конструкторе. Таким образом, m_data и основные данные относятся к одной и той же области памяти.
class MyWindow: public FL_Window
{
MyData& m_data;
public:
MyWindow(int wid, int hgt, MyData& data, const char* title=0)
: FL_Window(wid,hgt,title)
, m_data(data)
{
...
}
};
int main()
{
MyData data;
MyWindow gui(100, 100, data, "Call me Mr");
...
// Setup the dialog
gui.begin();
...
gui.end();
gui.show();
return FL::run();
}
Смежные вопросы
- 1. Где объявить onOptionsItemВыбран для глобального использования?
- 2. Где объявить этот объект регистратора?
- 3. где я должен объявить объект базы данных
- 4. , где объявить протоколы для повторного использования в Objective-C
- 5. Объявить объект на C++ без его создания?
- 6. Как объявить объект JQuery до его существования?
- 7. Как объявить объект для использования с этой функцией
- 8. Где хранится его объект android.graphics.Path?
- 9. Как заставить его работать? fltk-1.3.2
- 10. Как построить FLTK для использования с Netbeans (Windows)
- 11. Установка FLTK для кода :: Блоки
- 12. Android, где объявить SharedPreferences
- 13. Как объявить Enum для использования общим типом?
- 14. Где объявить переменную?
- 15. Объявить объект в заголовке
- 16. Где объявить модуль ngMock
- 17. Как установить FLTK для VS2010?
- 18. Где объявить сигнал sig_t для SIGPIPE
- 19. Объявить свойство как объект?
- 20. Объявить объект класса с параметрами без использования if ... else
- 21. AC_CHECK_LIB с fltk
- 22. Где объявить объект с общей частичной формой в Rails?
- 23. Разница между объявить имя, вводя имя, и объявить объект
- 24. Где объявить объект, возвращенный из Qt SIGNAL/SLOT?
- 25. Как объявить объект общедоступным?
- 26. Объявить переменную для использования внутри @ helper.repeat - PlayFramework
- 27. Как объявить переменную для глобального использования
- 28. angualr2: где объявить модель для ngModule
- 29. , где объявить массив элементов для счетчика
- 30. Как найти, где находится объект объявить в GSP
большое спасибо !!! оно работает!!!! единственная проблема заключается в том, что это немного уродливый код: D. но я думаю, это потому, что FLTK больше C, чем C++. Благодарим вас за вашу помощь и код и время. Это очень помогает мне! – firax
Единственная проблема заключается в том, что если я что-то меняю с помощью функций, это не сохраняет изменения. Поэтому я могу выполнять функции, но ничего не сохраняется. например, я настраиваю игроков, и они получают отметку X или O, которая отбрасывается обратно в вектор, но когда я вызываю функцию getMark, она возвращает случайный символ, поэтому я думаю, что он делает копию объекта и выполняет функцию запрашивается, а затем удаляется объект. Почему это так просто с глобалами и так сложно, когда все сделано правильно? – firax
Вы передаете данные по значению, по ссылке или указателем? – cup