Nehuhry Posted March 1 Share Posted March 1 Добрый вечер! В документации на WidgetButton устаревшая информация. Вызов привязки обработчика события клика на кнопку теперь выглядит таким образом: Было: m_btn->addCallback(Gui::CLICKED, MakeCallback(onButtonClicked)); Стало: m_btn->getEventClicked().connect(this, &BaseHUD::onButtonClicked); Link to comment
Nehuhry Posted March 1 Author Share Posted March 1 Также не нашел в документации. Есть ли возможность получить объект-sender события в обработчике? Например есть несколько объектов, которые вызывают событие, и, дабы не плодить кучу обработчиков, обрабатывать объекты внутри одного обработчика. Link to comment
fox Posted March 4 Share Posted March 4 Здравствуйте, @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 Link to comment
Nehuhry Posted March 4 Author Share Posted March 4 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; } Благодарю за ответ! Link to comment
Recommended Posts