2014-12-17 3 views
4

Qt, который, кажется, называет все остальное с начальным Q, делает это: #define signals signals в qobjectdefs.h.Qt #define «сигналы» столкновений с GStreamer (gst)

Однако GStream, не естественно, не представляет signals быть зарезервированное слово и делает это

struct _GDBusInterfaceInfo 
{ 
    /*<public>*/ 
    volatile gint   ref_count; 
    gchar    *name; 
    GDBusMethodInfo  **methods; 
    GDBusSignalInfo  **signals;   <================== 
    GDBusPropertyInfo **properties; 
    GDBusAnnotationInfo **annotations; 
}; 

в gdbusintrospection.h.

Я просто предполагаю, что Qt и GStreamer не играют хорошо вместе, или есть способ обойти это?

Примечание: Qt можно уговорить до #define signals signals, если я не #define Q_MOC_RUN. Но это приводит к проблемам с классами, которые используют

class 
{ 
    public: 
     // stuff 
    signals: 
     // stuff 
    private: 
     // stuff 
}; 

Как вы уже догадались, что я пытаюсь взять код от кого-то, кто не вокруг, чтобы поддержать его, и Google не мой друг :-(


[Update] Спасибо, @IpApp сюда кончике (который не работает, увы).

Я дал чужой код. по-видимому, построить для цели, но никогда не был построен единичный тест, и я должен это сделать (почему он смешал & соответствовал, I d o не знаю).

Когда я использую QT_NO_KEYWORDS в Eclipse CDT, я получаю ошибки, поскольку код определения класса не использует Q_SINGAL (S) - он использует макросы сигналов (которые теперь определены как сигналы) для определения определенных публичных элементов.

Мне не разрешено изменять код subsytsem, просто чтобы издеваться над его интерфейсами, но я не хочу издеваться над Qt & Glib, из-за усилий.

Возможно, есть способ использовать библиотеки для одного или другого, вместо того чтобы включать их каталоги в исходный путь?

+0

«Возможно, есть способ использовать библиотеки для одного или другого, вместо того чтобы включать их каталоги в исходный путь?» Ну да, вы всегда должны убедиться, что для каждой цели компиляции заданы только пути к библиотеке, которые ей нужны ... или это не то, что вы просите? –

ответ

3

Просто следуйте this documentation в файле проекта QMAKE:

CONFIG += no_keywords 

Если вы используете что-то другое, чем QMAKE, убедитесь, что вы определили следующее в вашем buildsystem:

QT_NO_KEYWORDS 

Затем необходимо убедиться, что вы используете Q_SIGNALS или Q_SIGNAL повсеместно в ваших заголовках, чтобы moc (компилятор метаобъектов) по-прежнему уведомлялся о том, что это сигнал.

+1

Примечание: это еще один вопрос, почему вы используете gstreamer напрямую, а не QtMultimedia. – lpapp

+0

См. Обновленный вопрос, так как в этом комментарии недостаточно места для ответа. – Mawg

+1

@Mawg: можете ли вы использовать '#undef сигналы' перед включением' gdbusintrospection.h', или это тоже вопрос? – lpapp

0

Я нашел другое решение, которое для меня более удобно и просто - вы должны включать в себя заголовки glib перед заголовками Qt, и все. Поскольку glib-код предшествует, на него не влияют инструкции Qt define.