معرفی فریمورک اپلیکیشن نویسی Qt ‏(6)

یک نکتهء مهم دربارهء پلاگین ها میخوام بگم.
بعضی کارایی ها در کیوت بصورت پلاگین پیاده سازی شدن. این پلاگین ها در پوشه ای بنام plugins در دایرکتوری نصب کیوت قرار دارن. اگر شما نسخه های جدید Qt SDK رو نصب کنید، احتمالا آدرس چنین خواهد بود: Qt installation dir\qt\plugins
منظور از Qt installation dir آدرس دایرکتوری محل نصب کیوت روی سیستم شما هست.

بقیهء مطلب رو با یک مثال نشون میدم که درمورد پلاگین jpg هست، اما بنظرم دقیقا همانطور به بقیهء موارد نیز قابل تعمیم هست. اینکه چه برنامه ای از چه امکاناتی استفاده میکنه و کدام پلاگین ها مورد نیاز هستن و نام فایلهای اونها چیه، کاری هست که برنامه نویس باید انجام بده و بنظرم با بیان این مطلب و این مثال دیگه زیاد سخت نیست.

این کد:

#include <QApplication>
#include <QPixmap>
#include <QPushButton>

int main(int argc, char *argv[]) {

QApplication app(argc, argv);

QPushButton quit("Quit");
QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
quit.show();

QPixmap pm(100,100);
pm.save("test.jpg", "jpg");

return app.exec();
}

برنامه ای ایجاد میکنه که بجز یک دکمه که کلیک کردنش باعث خروج از برنامه میشه، یک تصویر خالی با ابعاد 100 در 100 پیکسل ایجاد میکنه و با فرمت jpg اون رو در دایرکتوری جاری ذخیره میکنه. این یک تصویر تماما سیاه خواهد بود و محتویات دیگری نداره، چون ما فقط میخوایم طرز پکیج کردن برنامه هایی رو که با پلاگین های استاندارد کیوت و در اینجا با پلاگین jpg کیوت کار میکنن نشون بدیم.
چون برنامهء ما در فرمت jgp فایل رو ذخیره میکنه، بنابراین ما به پلاگین jpg کیوت نیاز داریم چون امکان کار با این فرمت توسط یک پلاگین در کیوت پیاده سازی شده.
وقتی ما برناممون رو در خط فرمان اجرا میکنیم همه چیز خوب کار میکنه و فایل مورد نظر در دایرکتوری پروژه ایجاد میشه.
اما ما بعد سعی میکنیم برنامه رو به روشی که در پست قبلی گفتم پکیج کنیم تا مستقل از نصب کیوت و روی هر سیستمی اجرا بشه و ضمنا ما هم بتونیم بدون خط فرمان و با کلیک مستقیم روی فایل برنامه اون رو اجرا کنیم.
ما فایلهای QtCore4.dll، QtGui4.dll و mingwm10.dll رو طبق معمول و مطابق درخواست برنامه در اختیارش میذاریم (در دایرکتوری فایل اجرایی برنامه کپی میکنیم). حالا برنامه رو با کلیک کردن روش اجرا میکنیم و میبینیم که ظاهرا همه چیز درست پیش میره.
اما حالا اگر برنامه رو روی سیستم دیگری ببریم که کیوت روش نصب نیست، برنامه با این اشکال مواجه میشه که فایل jpg تولید شده عملا خراب خواهد بود و میبینیم که یک فایل خالی با حجم صفر بایت ایجاد میشه. این به این خاطر هست که برنامهء ما از پلاگین jpg که از دایرکتوری نصب کیوت بدست میاره استفاده میکنه، اما روی سیستم دیگر که کیوت نصب نشده یا احتمالا چون در آدرس دیگری نصب شده، نمیتونه این پلاگین رو پیدا کنه.
ضمنا شما میتونید با Rename کردن موقت دایرکتوری نصب کیوت، این شرایط عدم پیدا شدن پلاگین jpg رو برای تست کردن روی سیستم خودتون شبیه سازی کنید و نهایتا با پکیج کردن تمام فایلهای لازم مطمئن بشید برنامهء شما کاملا مستقل از نصب کیوت روی سیستم کار میکنه. البته یادتون باشه به موقع نام دایرکتوری کیوت رو به نام اولیه برگردونید و همینطور موقع تست حواستون باشه که نام دایرکتوری کیوت در وضعیت استاندارد خودش هست یا در وضعیت تغییر نام یافته و شما کدوم حالت رو برای تست لازم دارید (اشتباه در این زمینه راحت پیش میاد و آدم رو گمراه کرده و باعث هدر رفتن وقت و انرژی و نیاز به تکرار مجدد تست ها میشه).

خب حالا ما چطور باید پلاگین رو در اختیار برناممون بذاریم؟
در دایرکتوری plugins چند دایرکتوری دیگه وجود داره که یکی از اون فولدرها نام imageformats داره و در درونش یکسری پلاگین مربوط به فرمت های تصویر وجود داره که یکی از اونها qjpeg4.dll هست.
ما باید یک فولدر دقیقا با همین نام (imageformats) در فولدر برنامهء خودمون ایجاد کرده و بعد فایل qjpeg4.dll رو هم داخل این فولدر که درست کردیم کپی کنیم.
حالا اگر برنامه رو مجددا تست کنیم (تغییر نام دایرکتوری کیوت فراموش نشه)، میبینیم که فایل jpg تولید شده اینبار درست و غیرخالی خواهد بود.

یک نکته: اگر به فایل qjpeg4.dll خصوصیت پنهان (hidden attribute) داده بشه، برنامهء کیوت اون رو load نکرده و برنامه دوباره درست کار نخواهد کرد.

نکتهء دیگر: موقعی که برنامهء مثال رو اجرا میکنید، محل ذخیرهء فایل تولید شده احتمالا بسته به اینکه از خط فرمان برنامه رو اجرا میکنید یا با کلیک مستقیم، متفاوت خواهد بود. چون معمولا خط فرمان در دایرکتوری پروژه قرار داره، اجرای برنامه از این طریق باعث ایجاد فایل تصویر در دایرکتوری پروژه خواهد شد، اما با کلیک مستقیم روی برنامه، فایل در دایرکتوری خود برنامه که فولدر release در درون فولدر پروژه هست ایجاد میشه.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>