سؤال

لقد قمت بإنشاء مكون إضافي مخصص عنصر واجهة مستخدم. يدمج المكون الإضافي بشكل جيد مع Creator QT ولكن عندما أقوم بتجميع البرنامج ، أحصل على هذا الخطأ:

"Test.H: لا يوجد مثل هذا الملف أو الدليل"

حيث Test.H هو اسم القطعة المخصصة. ما الخطأ الذي افعله؟ هذا هو ملف *.pro للتطبيق:

TEMPLATE = app
SOURCES += main.cpp \
    mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

هذا هو ملف *.pro للمكون الإضافي:

CONFIG      += designer plugin debug_and_release
TARGET      = $$qtLibraryTarget(testplugin)
TEMPLATE    = lib
HEADERS     = testplugin.h
SOURCES     = testplugin.cpp
RESOURCES   = icons.qrc
target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS    += target
include(test.pri)
هل كانت مفيدة؟

المحلول

بعد بحث مكثف ، تعثرت على هذا الموضوع:

http://www.archivum.info/qt-interest@trolltech.com/2010-02/01398/re-٪28Qt-Interest٪29-Undefined- Reference-to-٪28any-custom-widget٪29.html

اتضح أنه عند تجميع مكون إضافي ، فإن "DLL" الذي تحصل عليه هو فقط لأغراض تكامل مصمم QT Creator/QT. لا يمكنك الارتباط مع تلك المكتبة. يجب عليك توفير مكتبة أخرى تحتوي على الرؤوس والرمز المصدري أو تضمينها في مشروعك. لذلك ، لتلخيص ، إليك الخطوات المناسبة لنشر عنصر واجهة مستخدم مخصصة:

  1. قم بإنشاء مكتبة تحتوي على مصادر ورؤوس واجهة المستخدم المخصصة. دعنا نسمي هذه المكتبة A. بدلاً من ذلك ، أضف المصادر والرؤوس إلى مشروعك.
  2. قم بإنشاء المكون الإضافي عنصر واجهة المستخدم لتكامل Creator/Designer QT. مرة أخرى ، لا يمكن استخدام هذا البرنامج المساعد لأي شيء آخر غير تكامل Creator/Designer QT.
  3. في مشروعك ، يجب عليك إضافة الأسطر التالية إلى ملف *.pro:

    libs += c: [path to library a binary
    includepath += c: [Path to Library's A Headers

لاحظ مرة أخرى أنك تربط بالمكتبة أ ، وليس إلى المكتبة التي تحصل عليها عند تجميع البرنامج المساعد عنصر واجهة المستخدم.

نصائح أخرى

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

  • أضف المزيد من المسار إلى الرأس في البرنامج المساعد الخاص بك ، بحيث يمكن للبرامج التي تستخدم عنصر واجهة المستخدم العثور على الرأس بشكل مناسب.
  • أضف المسار إلى ملف الرأس كمسار لتشمل المترجم الخاص بك ، بحيث يمكن للمترجم العثور على الرأس المناسب عندما تشير ملفات البرنامج إلى ذلك.

واجهت نفس القضية. ثم حاولت إضافة جميع ملفات الرأس وملفات .cpp الخاصة بـ Plugin DLL إلى ملف مشروع التطبيق بشكل صريح. إصلاح المشكلة.

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