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);

...
792   3  

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

    Ничего не найдено.