سؤال

باستخدام QT Creator ، أقوم بإنشاء فصل مع فتحات مخصصة في QT:


class CustomEdit : public QTextEdit
{
    Q_OBJECT

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};

ومع ذلك ، أحصل على خطأ الرابط هذا:

undefined reference to 'vtable for CustomEdit'

الوثائق تقول:

إذا حصلت على أخطاء برمجية على خطوط "مرجع غير محدد إلى VTable لـ LCDNumber" ، فمن المحتمل أنك قد نسيت تشغيل MOC أو لتضمين إخراج MOC في أمر الارتباط.

... لكن ليس من الواضح ماذا يعني ذلك.

هل هناك شيء أحتاج إلى إضافته إلى صفي ، أو إلى ملف .pro؟

تعديل - هنا ملف .pro الخاص بي:

QT += network \
    script \
    webkit \
    xml
TARGET = MyApp
TEMPLATE = app
SOURCES += main.cpp \
    MainWindow.cpp \
    CustomEdit.cpp 
HEADERS += MainWindow.h \
    CustomEdit.h
FORMS += mainwindow.ui

تعديل:

هذا السؤال يتعامل مع نفس المشكلات ، لكن الإجابات لا توضح كيف يمكنني إصلاح هذه المشكلة في خالق QT. هل أحتاج إلى إضافة ملف .CPP الذي تم إنشاؤه بواسطة MOC إلى قائمة الملفات التي سيتم ربطها؟ هذا يبدو وكأنه ألم.

هل كانت مفيدة؟

المحلول

QT Creator هو IDE يستخدم لإنشاء مشاريع QT الخاصة بك. هذا كل شئ. لكن Qmake يسمح لك بتشغيل المشروع. من عند دليل Qmake,

يقوم QMake بأتمتة توليد Makefiles بحيث لا يلزم سوى بضعة أسطر من المعلومات لإنشاء كل Makefile. يقوم QMake بإنشاء Makefile بناءً على المعلومات الموجودة في ملف المشروع. يحتوي QMake على ميزات إضافية لدعم التطوير مع QT ، بما في ذلك قواعد إنشاء MOC و UIC تلقائيًا.

لا يتعين عليك تضمين ملفات MOC الخاصة بك بشكل منفصل ، ولكن عليك تشغيل QMake الذي يحتوي على جميع المعلومات حول ملفات MOC المطلوبة. ألقِ نظرة على المولدة Makefile.debug أو Makefile.release بعد Qmake ويمكنك العثور على جميع ملفات MOC سيتم تضمينها لك.

الآن لتشغيل Qmake في QT Creator ، فقط انتقل إلى Build->RebuildAll والتي ستقوم بتشغيل Qmake وسيتم إنشاء جميع ملفات (MOC) وربطها (في makefile.debug) أيضًا.

نأمل أن هذا سيؤدي إلى مرجعك غير المحدد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top