PDA

View Full Version : کمک در مورد یک مسوله عجیب در QT



QTdesigner
یک شنبه 29 شهریور 1388, 02:03 صبح
من برنامه ی ساده ای رو در Qt نوشتم که کار اون برنامه نمایش یک عکس است برنامه نوشته شده کاملا درست اجرا میشه ولیییی وقتی فایل exe اون رو از debug بر می دارم و به همراه dll های مورد نیازش می برم به یه جای مثل دسکتاپ و فایل جایی که qt رو در اونجا نصب کردم رو تغییر نام می دم مثلا e:\Qt رو به e:\Qttest تغییر می دم برنامه اجرا می شه ولییی اون عکس رو که قبل از این کار ها می یورد دیگه نمی یاره نمی دونم باید چی کار کنم لطفا یکی جواب سوال منو بده ممنون می شم یه سری کارها رو انجام دادم

مثل اینا>> عکس رو بردم توی یه فایل qrc بازم نیومد
برنامه رو با Release کامپایل کردم به جای debug ولی بازم نشد

به نظر خودم باید یه سری دستکاری ها در فایل pro بشه ولی نمی دونم چه رو باید تغییر بدم یا چه جیزی رو باید اضافه کنم

لطفا یکی جواب منو بده

QTdesigner
دوشنبه 30 شهریور 1388, 12:28 عصر
هیچ کس بلد نیست ؟؟؟؟؟؟؟؟/؟/

Nima_NF
دوشنبه 30 شهریور 1388, 15:39 عصر
1- هیچ وقت نباید فایل debug را به کامپیوتر دیگری ببرید، debug فقط مخصوص کامپیوتری هست که برای اشکال زدایی استفاده می شود و SDK QT در آن نصب شده باشد.
پس فایل نهایی حتما باید release باشد.

2- برای اطمینان تمامی فایل های dll و سایر موارد را که در فولدر Qt/bin وجود دارد در کنار فایل اجرای خود کپی کرده و به سیستم هدف ببرید، تا مطمئن شوید که dll خاصی مورد نیاز نیست که شما ندانید.

3- با توجه به نسخه کامپایلر باید dll های مورد نیاز آن کامپایلر را نیز علاوه بر dll های Qt در سیستم نصب کنید.


4- اگر موارد فوق کم باشند، برنامه معمولا خطا می دهد.

QTdesigner
دوشنبه 30 شهریور 1388, 16:24 عصر
من تمام این dll ها رو گذاشتم بقل exe ام ولی باز برنامه اجرا می شه یعنی تمام دکمه ها و object ها می یاد ولی عکس رو نمی یاره حتی بیشتر example های خود Qt رو هم امتحان کردم وقتی exe موجود در release رو به جوای دیگه میبریم و اسم دیراکتوری اصلی رو عوض می کنیم دیگه عکس رو نمی یاره این چه معنی داره یعنی برای این که exe برنامه ی ما توی یه کامپیوتر دیگه بخواد اجرا بشه باید Qt رو تو اون کامپیوتر نصب کنیم اگه این طوری چقدر بی خود این Qt ،:متفکر:اگه هم نه خوب چه جور می شه به صورت static درش اورد تا اونجای که من می دونم نمی شه درسته ؟:عصبانی++:

Nima_NF
دوشنبه 30 شهریور 1388, 17:30 عصر
یا همه مواردی را که گفتم کامل انجام نمی دهید یا در جای دیگری اشتباه می کند،در غیر این صورت فایل اجرایی مستقل به نصب بودن Qt مرتبط نیست، این همه برنامه که در ویندوز و لینوکس با آن ها کار می کنیم (مثل google erath ) فقط dll ها را کپی می کنند.

در هر حال، اگر می خواهید Qt به شکل static به برنامه اضافه شود و دیگر dll نخواهد باید کتابخانه Qt را به شکل static کامپایل کنید و سپس از آن استفاده کنید.
نحوه انجام این کار را در قسمت static linking صفحه زیر مطالعه کنید (برنامه Plug & Paint هم یک نمونه است):
http://doc.trolltech.com/4.1/deployment-windows.html#static-linking
لینک دوم:
http://qtnode.net/wiki?title=Building_static

ضمنا همچنان برنامه شما نیازمند dll های کامپایلر مورد استفاده نیز هست، مگر اینکه آن ها را نیز به شکل static به برنامه لینک کنید.

حامد مصافی
دوشنبه 30 شهریور 1388, 19:26 عصر
گمان می کنم شما دچار اشتباه ساده ای شدید (شاید هم من اشتباه می کنم)
شما از آدرس دهی مطلق استفاده کرده اید؟

اگر فایل شما کنار فایل اجرایی باشد باید آدرسی به این شکل داشته باشد:

QString file_path(argv[0] + "\\filename.etx");

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


QString file_path(":/folders/in/resource/file_name");

QTdesigner
سه شنبه 31 شهریور 1388, 14:52 عصر
باور کنید نمی شه آدرس دهیم درسته file:///C:/Documents%20and%20Settings/Administrator/Desktop/odbject%20Capture.gifببینید الان با عکس مشکل امو براتون باز می کنم که نشون می ده جواب این سوال برام خیلی مهمه!!!

اhttp://up.iranblog.com/2/1253641067.gifعکس بالا نشون می ده که من exe برنامه به همراه dll ها رو به رو دسکتاپ بردم و هنوز اسم فایل اصلی Qt رو عوض نکردم ، برامه به خوبی کار می کنه

عکس پایین نشون می ده که با تغییر نام Qt برنامه کار می کنه ولی اون عکس رو نمی یاره

و عکس بعدیش قسمت اصلی برنامم

http://up.iranblog.com/2/1253674932.gifhttp://up.iranblog.com/2/1253670172.gif

QTdesigner
سه شنبه 31 شهریور 1388, 15:01 عصر
یه کمک می شه برای static کردنش برام بکنید می از لینک های که دادید هیچی نمی شه فهمید
خودتو ن اگه می شه نکات اصلیشو بگید
ممنون می شم

QTdesigner
پنج شنبه 02 مهر 1388, 00:15 صبح
عکس هم گذاشتم چرا کسی جواب نمی ده ، تو این سوال من خیلی گیرم خواهش می کنم جواب بدید
می دونید که static کردن exe هیج فرقی با این که dll رو بقلش بزاریم نداره فقط تمام dll ها داخل exe میره به نظر من با این روش نمی شه درستش کرد

QTdesigner
پنج شنبه 02 مهر 1388, 17:16 عصر
سلام دوستان

من بعد از کلی تلاش و زحمت شبانه روزی تونستم جواب این سوال رو پیدا کنم

برای این که کسی دیگه مثل من بدبخت نشه جواب رو این جا می ذارم تا همه استفاده کنن

کسای که تازه اومدن پیشنهاد می کنم حتما سوال های من رو قبلش بخونن مخصوصا عکسی که گذاشتم بعد جواب رو نگاه کنن:چشمک:

ببینید شاید شما این کار رو با فرمت png کرده باشید و به راحتی جواب گرفته باشید ولی موضوع من سر فرمت jpg
خود Qt پلاگینی برای این کار داره به نام qjpeg ولی همین طوری نمی شه ازش استفاده کرد
باید توی فایل pro تایپ کنید
TEMPLATE = app
QTPLUGIN += qjpeg
بدون import کردن qjpeg . حالا وقتی اجرا می گیریم و exe رو جای دیگه کپی می کنیم کافیه بقل exe فایل موجود در Qt\plugins\imageformats .... (جای نقطه های درایوی که Qt رو توش نصب کردیم رو می نویسیم ) رو کنارش کپی می کنیم

کسایی که با مشکل من مواجه شدن و یه راست جواب رو این جا پیدا کردن بدونن جواب این سوال فقط توی تعدادی از سایت های پرسش و پاسخ انگلیسی پیدا می شه و تقریبا کمیابه

بعد اگر حالا Qt رو به کل حذف هم کنید عکس با فرمت jpg حذف نمی شه ولی اگه این کار رو انجام ندیم حذف می شه