MOC إضافة مساحة الاسم إلى أسماء الفصل
-
30-09-2019 - |
سؤال
لدي هذه المشكلة الغريبة للغاية أثناء تجميع المشروع. يبدو أن MOC يضيف مساحة اسم إلى اسم الفصل يجري moc'ed ، على الرغم من أنه لم يتم ذكره في أي مكان في الملف/الفصل.
ومع ذلك ، فإن مساحة الاسم موجودة في مكتبة أستخدمها ، لكنها مخفية بعيدًا في ملفات الرأس ولا أستخدمها في ملفات واجهة المستخدم. هذا ما يولده MOC:
const QMetaObject SmpTl::CaptureController::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_SmpTl__CaptureController,
qt_meta_data_SmpTl__CaptureController, 0 }};
ال SmpTl
لم يتم ذكر مساحة الاسم في أي مكان في إعلان CaptureController
, ، ولكن يظهر في ملف .cpp الذي تم إنشاؤه MOC.
أنا أستخدم Visual Studio مع تكامل QT.
المحلول
SmpTl
هي مساحة الاسم CaptureController
تم تعريفه في ، كما وجد من قبل MOC.
ال Q_OBJECT
يتوسع الماكرو إلى إعلان staticMetaObject
-متغير داخل تعريف الفصل الخاص بك (من بين أشياء أخرى تتوسع فيها). يحتوي ملف MOC على تعريف هذا المتغير.
إذا لم يكن هذا صحيحًا ، فيرجى نشر إصدار QT الخاص بك وإصدار تجريد من ملف رأسك.
نصائح أخرى
واجهت أيضا هذه المشكلة. كان لدي رمز يبدو هكذا:
namespace foo {
#ifdef _WIN32
... // This code was fine
#else
#error Not Supported
#endif
}
هذا MOC الخلط في مساحة اسم التفكير foo
لم تغلق. على ما يبدو ، لم يكن يعلم _WIN32
تم تعريفه ، وتعثرت من خلال حقيقة أنني نسيت وضع اقتباسات حول رسالة الخطأ. تغييره إلى:
#error "Not Supported"
إصلاح مشكلتي.