Что такое сигналы и слоты в Qt? - PullRequest
4 голосов
/ 06 июня 2010

Я знаю, как они работают концептуально, но как сигналы и слоты реализованы в платформе Qt? Qt Creator рассматривает их как ключевые слова, но являются ли они просто набором макросов или требуется специальный препроцессор для компиляции этих исходных файлов?

Другими словами, если я использую в своем коде функции сигнала / слота Qt, могу ли я легко скомпилировать его на любом компиляторе C ++?

Ответы [ 3 ]

9 голосов
/ 06 июня 2010

Многие функции Qt, включая сигналы, требуют предварительной обработки источника с использованием мета-объектного компилятора Qt (MOC) .

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

Если вы ищете реализацию кроссплатформенных сигналов, вы также можете рассмотреть Boost.Signals .

1 голос
/ 07 июня 2010

Вы можете использовать любой компилятор, поддерживаемый Qt. Каковы наиболее часто используемые, не знаю, есть ли какой-либо широко распространенный компилятор, который не поддерживается. Однако сигнал / слот / moc здесь не является ограничивающим фактором. Сигнал / слоты требуют, чтобы исполняемый файл moc вызывался в заголовочных файлах, объявляющих объекты QObject и сгенерированный код для компиляции и связывания. Поэтому интеграция вызова moc в существующую систему сборки может оказаться самой большой проблемой. Если вы начинаете с нуля, я бы предложил перейти на qmake или cmake.

1 голос
/ 06 июня 2010

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

Если вы хотите использовать сигналы / слоты в проектах, отличных от Qt, вы можете использовать реализацию Boost (http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html).

Другие реализации перечислены на вики-странице: http://en.wikipedia.org/wiki/Signals_and_slots

...