Подтвердить что ты не робот

Qt "частные слоты:" что это?

Я понимаю, как его использовать, но синтаксис этого меня беспокоит. Что такое "частные слоты:" делать?

Я никогда не видел что-то между ключевым словом private и: в определении класса раньше. Есть ли какая-то причудливая магия С++ здесь?

И пример здесь:

 #include <QObject>

 class Counter : public QObject
 {
     Q_OBJECT

 public:
     Counter() { m_value = 0; }

     int value() const { return m_value; }

 public slots:
     void setValue(int value);

 ...
4b9b3361

Ответ 1

Слоты - это Qt-специфическое расширение С++. Он компилируется только после отправки кода через препроцессор Qt, компилятор мета-объектов (moc). См. http://doc.qt.io/qt-5/moc.html для документации.

Изменить: Как указывает Фрэнк, moc требуется только для соединения. Дополнительные ключевые слова #defined away со стандартным препроцессором.

Ответ 2

Ключевые слова, такие как public, private, игнорируются для слотов Qt. Все слоты на самом деле общедоступны и могут быть подключены

Ответ 3

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

Если вы объявляете сигнал и слот как частные, вы говорите, что только этот класс может управлять тогда.

Кроме того, также упоминаются и другие ответы:
- вы все равно можете подключать частные сигналы и слоты снаружи с помощью трюков
- signals и slots - это пустые макросы и не нарушают языковой стандарт