2013-07-12 4 views
2

Как поставить макрос Q_PROPERTY внутри другого, вспомогательный макрос?Q_PROPERTY макрос в другом макросе

.. не работает. Выход препроцессора (gcc -E flag или nmake/jom /P flag) показывает (рабочий) метод setter/getter и соответствующую переменную-член, но не один символ для линии Q_PROPERTY.

Обновление: Кажется, что работает с Qt5.1, который правильно расширяет пользовательские макросы. Qt4.8 не работает, Qt5.0 не был протестирован. См. #QTBUG-35 (спасибо?).

+0

Обратите внимание, что 'Q_PROPERTY()' препроцессору не должен расширяться до тех пор, пока не будет определен параметр 'Q_MOC_RUN'. 'Q_PROPERTY()' не предназначен для просмотра компилятором, только 'moc'. –

ответ

1

MOC в Qt4.x не распознает q_ макросы в макросов препроцессора.

moc в Qt5.x расширяет препроцессорные макросы перед разбором макросов Q_.

0

У вас есть ошибка тоже в линиях

Set##member##(_type _arg_##member) \ 
_type Get##member##() const\ 

из ##(), которое оценивается в

SetArg(
_type GetArg(

по НКУ и отклоненных (MSVC игнорирует его).

Попробуйте следующую исправленную версию, и она должна работать:

#define MachAlles(member, _type) \ 
    public: \ 
    /** 
    * Set member of type _type. 
    * @see m_##member for a more detailed description 
    */ \ 
    void Set##member(_type _arg_##member) \ 
    { \ 
    m_##member = _arg_##member;\ 
    } \ 
    /** 
    * Get member of type _type. 
    * @see m_##member for a more detailed description 
    */ \ 
    _type Get##member() const\ 
    { \ 
    return m_##member;\ 
    } \ 
    private: \ 
    _type m_##member; \ 
    Q_PROPERTY(_type member READ Get##member WRITE Set##member) 
+0

Вы правы, спасибо за разъяснение. Однако это не влияет непосредственно на проблему Q_PROPERTY с компилятором метаобъекта Qt. – braggPeaks

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