Nehuhry Posted March 1, 2024 Posted March 1, 2024 Добрый вечер! В документации на WidgetButton устаревшая информация. Вызов привязки обработчика события клика на кнопку теперь выглядит таким образом: Было: m_btn->addCallback(Gui::CLICKED, MakeCallback(onButtonClicked)); Стало: m_btn->getEventClicked().connect(this, &BaseHUD::onButtonClicked);
Nehuhry Posted March 1, 2024 Author Posted March 1, 2024 Также не нашел в документации. Есть ли возможность получить объект-sender события в обработчике? Например есть несколько объектов, которые вызывают событие, и, дабы не плодить кучу обработчиков, обрабатывать объекты внутри одного обработчика.
fox Posted March 4, 2024 Posted March 4, 2024 Здравствуйте, @Nehuhry! Спасибо, сниппеты обновлены! Что касается sender в обработчике, то так все и работает - вот, например, для виджетов (widget - как раз и есть sender): // implement the Clicked event handler void clicked_event_handler(const Ptr<Widget> & widget, int mouse_buttons) { Log::message("\Handling Clicked event\n"); } Вот еще пример, может пригодиться: class EventSender { public: void Update() { event.run(this, frame); frame++; } Unigine::Event<EventSender *, int> &getEvent() { return event; } private: int frame; Unigine::EventInvoker<EventSender *, int> event; } 2
Nehuhry Posted March 4, 2024 Author Posted March 4, 2024 14 hours ago, fox said: Здравствуйте, @Nehuhry! Спасибо, сниппеты обновлены! Что касается sender в обработчике, то так все и работает - вот, например, для виджетов (widget - как раз и есть sender): // implement the Clicked event handler void clicked_event_handler(const Ptr<Widget> & widget, int mouse_buttons) { Log::message("\Handling Clicked event\n"); } Вот еще пример, может пригодиться: class EventSender { public: void Update() { event.run(this, frame); frame++; } Unigine::Event<EventSender *, int> &getEvent() { return event; } private: int frame; Unigine::EventInvoker<EventSender *, int> event; } Благодарю за ответ!
Recommended Posts