2014-02-09 3 views
6

Я только что начал изучать wxWidgets, версия 3.0, с C++. Я отметил, что обработка событий в wxWidgets выполняется с помощью таблиц событий. Но в одном учебнике также упоминалось Connect() - на самом деле он просто сказал: «В этом учебнике будут использоваться таблицы событий, а не Connect()».wxWidgets - Таблица событий vs Connect()?

Я хотел бы знать, что является философией за таблицами событий и за Connect()? В чем разница, когда еще один подходящий, чем другой ... Спасибо.

+0

Один запрос google позже: http://wxwidgets.blogspot.com/2007/01/in-praise-of-connect.html ;-) –

+0

Собственно, вы не должны использовать ни один из них. Вместо этого используйте Bind/Unbind, это безопаснее, чем Connect/Disconnect, потому что они выполняют больше проверок времени компиляции. –

+0

@ KristianDuske - знаете ли вы какие-либо примеры/учебники, в которых показано, как использовать Bind()? Я почти уверен, что как новичок я не смогу это выяснить самостоятельно. Спасибо. –

ответ

13

Во-первых, не используйте Connect(), который был заменен на Bind(), который лучше во всех отношениях.

Во-вторых, как статические (с использованием таблиц событий), так и динамические (с использованием Bind()) методы обработки событий работают, и вы можете использовать то, что вы предпочитаете. Лично я рекомендую использовать Bind() потому

  1. Это гораздо более гибким: может быть использован для подключения события на одном объекте в любой другой объект или даже свободной функции или, в C++ 11, a lambda.
  2. Это безопаснее и улавливает наиболее распространенные ошибки, такие как неправильная подпись обработчика события во время компиляции.
  3. Это «динамический», то есть вы можете в любое время подключить и отключить обработчик.

Основные преимущества таблицы событий, которые являются

  1. Они немного короче, особенно в предварительно версии 3.0.
  2. Они гораздо чаще встречаются в документации, примерах, учебниках, ... только потому, что у них было 15-летнее начало на Bind().

Однако они более неудобны для использования, потому что они требуют подкласса (получения нового класса) объекта для обработки событий, отличных от команды, и они не обнаруживают всех ошибок во время компиляции, что позволяет писать код, который компилируется, но сбой во время выполнения.

+0

Спасибо, что ответили. Можете ли вы указать на некоторые хорошие примеры/учебные пособия, которые показывают, как использовать Bind()? Я заметил, как вы сказали, что таблицы событий повсюду. Но, как новичок, я сомневаюсь, что я могу научиться использовать Bind() без какого-либо примера. –

+1

'samples/event' содержит простой пример использования' Bind() '(в дополнение ко всем другим методам обработки событий). В [документации] (http://docs.wxwidgets.org/trunk/overview_events.html) также содержатся некоторые простые примеры. –

Смежные вопросы