2015-12-14 1 views
1

я делал программирование графического интерфейса Qt, в сигналах и слот раздела, у меня есть следующий синтаксис:маркирована область в C++ класс

class Myclass 
{ 
    public slot: 

    signal: 

} 

Разрешается ли это иметь меченую область в классе, потому что обычно я видел это :

class Myclass 
{ 
    public: 
    //declarations 
} 

Доступ к модификаторам также имеет метку или это особый синтаксис в Qt?

Просьба уточнить. Любая помощь приветствуется. Заранее спасибо.

ответ

3

Эти ярлыки являются расширениями Qt для C++ (http://woboq.com/blog/how-qt-signals-slots-work.html). Компилятор MOC анализирует файлы и генерирует соответствующую логику клея. Подробности указаны в ссылке.

+2

Это в основном ответ только для ссылок, который потеряет почти всю ценность, если связь сломается. Можете ли вы уточнить некоторые из них (например, упоминание защищенных Qt '#define сигналов?)? – Angew

0

заголовки в Qt определить эти препроцессора макросы, так что при компиляции, slot расширяется в пустую строку, и signal расширяется до protected (в Qt 4) или public (в Qt 5). Что касается компилятора C++, то он видит что-то вроде:

class Myclass 
{ 
    public : /* was public slots */ 

    public: /* was signals */ 

} 

для вашего примера выше.

Когда компилятор Meta-Object moc запускается в одном объявлении, он интерпретирует (un-replace) Qt ключевые слова и использует их для компоновки метаобъектов.

+0

Как описано здесь: http://stackoverflow.com/questions/19129133/qt-signals-and-slots-permissions Сигналы защищены в Qt4, но являются общедоступными в Qt5. –