2015-04-01 4 views
1

Я читал Signals & Slots | Qt Core 5.4 и у них был следующий код.Пользовательские модификаторы видимости в 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); 

signals: 
    void valueChanged(int newValue); 

private: 
    int m_value; 
}; 

Я видел private, public и protected раньше, но никогда ничего подобного.

  • Что происходит с целыми public slots: и signals: видимости модификаторов (это то, что они называются)?

  • Что они означают и где в стандарте они говорят об этом?

  • Когда можно/следует использовать их в своем собственном коде?

+1

Обратите внимание, что синтаксический ярлык пропускает их - они не являются стандартными C++; следовательно, не в стандарте, а не в качестве ключевых слов. – OJFord

ответ

4

slotssignals просто оценить пустые строки или модификаторов, и они определяются неявно включая QObject.h. Это только маркеры для Qt moc (метаобъект метаобъекта). Q_OBJECT расширяется до некоторого общего интерфейса класса Qt.

moc будет генерировать код из заголовка и с этими макросами вы предоставить дополнительную информацию, как «эти методы являются слотами» или «это будет Qt маньяков класса»

Вы должны использовать их только в Qt-Projects и случай, когда вы разрабатываете класс, который «становится» и обрабатывает объекты Qt. Примерами являются ваши собственные Qt-Widgets или любой объект, который должен иметь возможность отправлять/получать сигналы.

Вы не найдете ничего в стандарте об этих макросах, потому что они не являются его частью. Это просто расширение Qt-Framework, и вы сможете компилировать свои классы только при включении соответствующих файлов заголовков Qt.

+1

Правильно, они не являются стандартными C++. – Prismatic

+0

Как я могу создать свои собственные модификаторы, такие как QT? –

Смежные вопросы