مرحله 36 : نحوه افزودن دیگر کتابخانه های C++‎‎‎ در محیط Qt Creator و استفاده همراه با کتابخانه Qt

سلام ؛

امروز قصد دارم نحوه افزودن کتابخانه های دیگه رو در محیط Qt توضیح بدم با این روش شما میتونید هر کتابخانه ای رو وارد پروژه کرده و همراه با کتابخانه Qt ازش استفاده کنید برای مثال من خودم به شخصه همیشه رابط کاربری رو با Qt طراحی میکنم و برای برنامه نویسی اصلی از کتابخانه های استاندارد C++‎ و یا دیگر کتابخانه های اختصاصی مثل Boost و Poco استفاده میکنم.

در این آموزش من نحوه وارد کردن کتابخانه Poco رو براتون توضیح میدم.


زبان C/C++‎‎‎‎‎‎‎‎‎‎‎‎‎ یکی از قابلیت هایی که نسبت به زبان های دیگری مانند C#‎‎‎‎‎‎‎‎‎‎‎‎‎ یا غیره داره نامحدود بودن استفاده از کتابخانه های این زبان هست که به صورت پیشفرض کتابخانه های استاندارد و از قبل تعریف شده در زبان C++‎‎‎‎‎‎‎‎‎‎‎‎‎ قابل استفاده هستند مانند کلاس های iostream و ... که کاملا پیشفرض روز این زبان ارائه شده است.
حالا در رابطه با این موضوع باید توضیحی بدم که اگر برنامه نویس یا توسعه دهنده ای نیازمند استفاده از کتابخانه ای منحصربفرد رو داره میتونه اون رو به زبان C++‎‎‎‎‎‎‎‎‎‎‎‎‎ اضافه کنه و ازش استفاده کنه برای مثال من برای کار با شبکه و اینترنت کتابخانه POCO رو ترجیح میدم پس برای استفاده از این ابتدا باید پیکربندی و آماده سازی لازم رو انجام بدم به صورت زیر عمل میکنم.


ابتدا کتابخانه رو دانلود میکنم و در مسیر مقابل به صورت دلخواه قرار میدم : C:\poco-1.5.3-all (من امروز در محیط ویندوز هستم برای همین روی ویندوز این رو توضیح میدم توضیحات دقیقا روی محیط Linux هم صدق میکنه تفاوت چندانی نداره فقط باید کتابخانه رو از قبل کامپایل کرده باشید)


قبل از هر چیزی باید بدونید که هر کتابخانه دارای libs و include هستش هر نوع کتابخانه ای که دانلود کنید این دو تا گزینه رو باید داشته باشه که بعد از کامپایل کتابخانه فایل lib و dll هاش در ویندوز یا Linux ایجاد خواهد شد.


من به دلیل پیچیده بودن کتابخانه POCO (پوکو) رو انتخاب کردم چون شامل کتابخانه های مربوط به Net و ... هستش که برای آموزش هدف من کار با Net هست بنابراین پوشه های include و libs در کنار هم نخواهند بود لذا include مربوط به هر کتابخانه در داخل خودش قرار گرفته.

خب بریم سر اصل مطلب ابتدا یه پروژه ای ایجاد میکنم با نام MyLibs از هر نوعی ایجاد میکنید مهم نیست.

روی پروژه طبق تصویر راست کلیک کنید و گزینه Add library رو بزنید.


بعد چنجره زیر نماین میشه که شامل گزینه های زیر هستش :



  1. گزینه Internal Library مربوط هست برای زمانی که شما کتابخانه رو در داخل پروژه خودتون ایجاد کردین که معمولا مسیر واقع توسط فایل .pro مشخص خواهد شد به طور کلی کتابخانه های داخلی و غیر External رو میتونید از این قسمت شناسایی کنید.
  2. گزینه External library از این گزینه زمانی استفاده میشه که کتابخانه ما در مسیر پروژه ما نیستش یا به طور کلی در داخل پروژه ما قرار نگرفته دقیقا برعکس گزینه اول که میشه همون کتابخانه خارجی یا خارج از پروژه.
  3. گزینه System library هم مربوط میشه به کتابخانه های سیستمی هستش.
  4. و یک گزینه ای هم خواهیم داشت در محیط های Unix که به نام Package Library قابل مشاهده خواهد بود این گزینه هم زمانی مورد استفاده قرار میگیره که شما نیاز دارید کتابخانه رو از طریق سرویس pkg-config در ایستگاه های Unix که شامل Mac OS X و Linux هستش تنظیم کنید.


حالا ما با این ها کاری نداریم و در استاندارد ترین حالت از External Library استفاده خواهیم کرد بنابراین گزینه External Library رو انتخاب و Next میزنیم.

l3.png

خب در این قسمت ما گزینه هایی داریم که مربوط به پیکربندی و مشخص کردن مسیر کتابخانه ای هستش که از قبل کامپایل و خروجی های lib و یا dll اون مشخص شده است.
بنابراین گزینه ها وظایف زیر رو دارند :

  1. گزینه Library file مربوط هست به مسیر فایل های مربوط به libs موجود در کتابخانه برای مثال مسیر lib برای کتابخانه Poco در ایستگاه ویندوزی من هستش : C:\poco-1.5.3-all\lib پس روی گزینه Browse کلیک کرده و این مسیر رو با انتخاب فایل مورد نظرم مثلا PocoNetd.lib مشخص میکنم در نهایت مسیر میشه به صورت : C:\poco-1.5.3-all\lib\PocoNetd.lib
  2. گزینه Include path مربوط هستش به پوشه Include مربوط به کتابخانه که شامل فایل های .h یا همون هدر هاست بنابراین برای اینکه Include مربوط به کلاس های Net رو انتخاب کنم میرم به مسیر : C:\poco-1.5.3-all\Net\include که شامل Include های مشخص برای فایل Net هست.
  3. گزینه Platforms مشخص کننده مسیر در فایل .pro برای نوع سیستم عامل هستش.
  4. گزینه Linkage - Dynamic مشخص کننده کتابخانه از نوع Dynamic یا Static و گزینه Framework هستش.
  5. و در آخر گزینه ای داریم که مختص ویندوز هست.


تنظیمات رو به صورت زیر انجام میدیم و Next رو میزنیم.

l4.png

و در نهایت Finished و سپس در داخل فایل .pro کد های زیر رو خواهیم دید.


win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNetd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet


INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include


کتابخانه من آماده هستش ولی چون در Poco برای استفاده از کلاس مورد نظر پیش نیازی داریم به نام Foundation پس اون گزینه رو هم باید طبق روشی که گفتم اضافه کنیم که در نهایت به صورت زیر خواهد بود :


win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNetd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet


INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include


win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoFoundation
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoFoundationd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoFoundation


INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Foundation/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Foundation/include


خب حالا فایل .pro رو Save کرده و روی گزینه build و بعد Run qmake کلیک میکنیم تا پروژه با تغییراتی که داده شد پیکربندی و آماده شود.

برای آزمایش کد زیر رو مینویسم و کتابخانه بدون مشکل قابل دسترسی و استفاده هستش :


#include "mainwindow.h"
#include "ui_mainwindow.h"


#include <Poco/Net/Net.h>
#include <Poco/Net/MailMessage.h>


using namespace Poco::Net;


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);


MailMessage mail;
}


MainWindow::~MainWindow()
{
delete ui;
}




فقط بازم تاکید میکنم نوع کامپایلری که کتابخانه رو باهاش کامپایل کردین خیلی مهمه مثلا من از قبل این کتابخانه رو با MSVC 2013 نسخه 32 بیت در مد Debug کامپایل کردم پس در Qt هم باید از مد Debug و کامپایلر MSVC 2013 با معماری 32 بیت استفاده کنید.

نه تنها Poco من این مثال رو فقط برای آموزش مراحل تعریف کتابخانه زدم بنابراین از تمامی کتابخانه ها به همین روش میتونید استفاده کنید.

شاد و پیروز باشید.