Qt "private slots:" что это такое?
Я понимаю, как его использовать, но синтаксис меня беспокоит. Что такое" частные слоты: "делать?
Я никогда не видел что-то между ключевым словом private и : в определении класса раньше. Есть ли здесь какая-то причудливая магия C++?
и вот пример:
#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);
...
3 ответов:
слоты являются специфичным для Qt расширением C++. Он компилируется только после отправки кода через препроцессор Qt, компилятор Метаобъектов (moc). См.http://doc.qt.io/qt-5/moc.html для документации.
Edit: как указывает Фрэнк, moc требуется только для связывания. Дополнительные ключевые слова #определяются с помощью стандартного препроцессора.
ключевые слова, такие как
public,privateигнорируются для слотов Qt. Все слоты на самом деле являются общедоступными и могут быть подключены
объявление слотов как частных означает, что вы не сможете ссылаться на них из контекста, в котором они являются частными, как и любой другой метод. Следовательно, вы не сможете передать частные слоты адрес
connect.если вы объявляете сигнал и слот как частные вы говорите, что только этот класс может управлять тогда, но указатели на функции-члены не имеют ограничений доступа:
class A{ private: void e(){ } public: auto getPointer(){ return &A::e; } }; int main() { A a; auto P=a.getPointer(); (a.*P)(); }кроме этого, какие еще ответы упоминаются действительны тоже:
- вы все еще можете подключать частные сигналы и слоты снаружи с помощью трюков
-signalsиslotsпустые макросы и не нарушают стандарт языка
Comments