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);
...
Ответы
Ответ 1
Слоты - это Qt-специфическое расширение С++. Он компилируется только после отправки кода через препроцессор Qt, компилятор мета-объектов (moc). См. http://doc.qt.io/qt-5/moc.html для документации.
Изменить: Как указывает Фрэнк, moc требуется только для соединения. Дополнительные ключевые слова #defined away со стандартным препроцессором.
Ответ 2
Ключевые слова, такие как public
, private
, игнорируются для слотов Qt. Все слоты на самом деле общедоступны и могут быть подключены
Ответ 3
Объявление слотов как закрытых означает, что вы не сможете ссылаться на них из контекста, в котором они являются частными, как и любой другой метод. Следовательно, вы не сможете передать адрес закрытых слотов на connect
.
Если вы объявляете сигнал и слот как частные, вы говорите, что только этот класс может управлять тогда.
Кроме того, также упоминаются и другие ответы:
- вы все равно можете подключать частные сигналы и слоты снаружи с помощью трюков
- signals
и slots
- это пустые макросы и не нарушают языковой стандарт