کیوتی ساده و آسان برای همه

پاسخ به یک سوال

نویسنده :سعید دادخواه
تاریخ:یکشنبه 17 بهمن 1389-07:13 ب.ظ

Alir3z4
 
درود رفیق
در مورد ارتباط كیوت با دیگر برنامه بنویس
مثلا ارسال مقادیر به برنامه های دیگه و گرفتن خروجی !
یه مثال خیلی عالی میشه
مرسی
 
جواب: ببین علیرضا جان برای ارتباط بین برنامه ها میشه از دو راه وارد شد یا اینکه اون برنامه رو اجرا کرد و یک سری ورودی بهش داد و یک سری خروجی ازش گرفت ( البته برنامه های command line ، برنامه های گرافیکی چون platform dependent هستند یعنی هر سیستمی قواعد خودشو داره و از طرفی کیوتی یه فریم ورک مستقل از سکو platform independent هستش در این مورد باید از api های هر سیستمی جدا استفاده کنی ) و یه نوع دیگه هم Ipc هستش (Inter process communication ) کدوم رو نیاز دارین بگین تا براتون مثال بزنم


نوع مطلب : عمومی 

داغ کن - کلوب دات کام
نظرات() 

در مسابقه برنامه نویسی موبایل کیوتی شرکت کنید و 10000 یورو جایزه ببرید !

نویسنده :سعید دادخواه
تاریخ:شنبه 16 بهمن 1389-12:59 ق.ظ

سلام
به Qtest Mobile App Port خوش آمدید. به عنوان یک توسعه دهنده application با کیوتی میدونم که معتقدید که خیلی کار باهاش لذت بخشه اما خوب تاحالا تجربه برنامه نویسی موبایل با کیوتی برای Symbian یا MeeGo رو داشتین ؟ دوست دارین چطور این مرحله یعنی انتقال برنامه تون به موبایل طی بشه ؟ اگه برنامه تون توی Ovi Store نمایش داده بشه حاضرین این کارو انجام بدین .
خوب این مسابقه بهانه ای است برای این انتقال و یا حتی یه گوشی موبایل جدید به عنوان هدیه برای شما یا حتی 10000 یورو !

جزئیات
این مسابقه در تاریخ 20 دسامبر 2010 شروع شده است و قرار بود تا 28 فوریه مهلت ارسال به شرکت کنندگان داده بشه و در ضمن 31 دسامبر هم اخرین تاریخ برای شرکت در مسابقه Early Bird بود . اما تاریخ شرکت در مسابقه تا 31 مارس تمدید شد.
در مرحله اول مسابقه یعنی همون Early Bird Competition پنج نفر انتخاب میشند که به هرکدوم یه N900 میدند. و اما در مرحله اصلی مسابقه جایزه اصلی 10000 یورو خواهد بود.نفرات دوم تا ششم هم دوباره N900 میگیرند
هر کسی هم که شرکت کنه چه برنده بشه چه نه یک عدد کیف و تیشرت جایزه خواهد گرفت.
پس دوستان این فرصت طلایی رو از دست ندهند . 

برای اینکه اطلاعات بیشتری بدست بیارین به اینجا مراجعه کنید




داغ کن - کلوب دات کام
نظرات() 

Cutie مجموعه ای از آیکن ها

نویسنده :سعید دادخواه
تاریخ:پنجشنبه 14 بهمن 1389-09:53 ب.ظ

خوب همون طور که قول داده بودیم این وبلاگ قصد داره تمام مطالب جالب در مورد کامپیوتر رو پوشش بده و نه صرفا کیوتی.( البته فوکوس اصلی ما روی کیوتی است ).

امروز قصد دارم یه مجموعه آیکن براتون بذارم که مجموعه ای است از پرکاربرد ترین ایکن ها در دنیای وب. این مجوعه فوق العاده زیبا میتونه به سایت شما و یا برنامه شما جلوه خاصی ببخشه


ادامه مطلب

نوع مطلب : گوناگون 

داغ کن - کلوب دات کام
نظرات() 

دیالوگ های استاندارد : پیام های خطایی که یک بار نمایش داده میشوند

نویسنده :سعید دادخواه
تاریخ:پنجشنبه 14 بهمن 1389-08:43 ب.ظ

در برنامه های استاندارد زیاد دیدن مواقعی که یه پیام بهتون نمایش داده میشه و پیام حاوی یه تیکیه که اجازه میده دیگه این پیام نمایش داده نشه. مثلا تیک حاوی متن Don't show this message again رو خیلی دیدین . آیا این کار در کیوتی امکان داره بله. با کلاس QErrorMessage.

بر خلاف کلاس QMessageBox که شما بدون هیچ شیی و به صورت استاتیک میتونستید یه پیام نشون بدین ولی اینجا دیگه اینطور نیست . اشیای این کلاس وقتی که شما اسلات showMessage عضو کلاسشون یعنی QErrorMessage رو صدا بزنید ( چه مستقیم چه با سیگنال ) پیام رو نشون میدن.

اشیای این کلاس دو خاصیت دارند . به کد زیر نگاه کنید تا توضیح بدم

کد:
QErrorMessage *msg= new QErrorMessage; msg->showMessage("Error1"); msg->showMessage("Error2"); msg->showMessage("Error1"); msg->showMessage("Error2");
اولا این که تا پیام اول در حال نمایش هستش پیام های دیگه نمایش داده نمیشند . در ثانی اگه Error1 تیکش برداشته بشه دیگه Error1 دومی نمایش داده نمیشه


داغ کن - کلوب دات کام
نظرات() 

دیالوگ های استاندارد

نویسنده :سعید دادخواه
تاریخ:پنجشنبه 14 بهمن 1389-07:57 ب.ظ

سلام دوستای عزیز

در این قسمت قصد داریم دیالوگ های آماده در کیوتی رو بررسی کنیم . این دیالوگ ها در بسیاری از مواقع کار رو براتون خیلی راحت میکنند . قبلا دو نمونش رو دیدیم QFileDialog که برای ذخیره و باز کردن فایل استفاده میشد.

دیالوگ های پیغام
خیلی وقتا میخواید یه چیزی رو به اطلاع کاربر برسونید . خیلی وقتا نیاز دارین به کاربر بگین که درخواستش انجام شد . خیلی اوقات نیاز دارین از کاربر سوالاتی بپرسین . در این صورت شما نیاز به یه message boxپیدا کردین .برای این کار میتونید یه کلاس از کلاس QDialog به ارث ببرین و اونو همون طور که خودتون دلتون میخواد بسازینش و بعدش اونو exec کنید . اما خوب نیازی به این کار نیست چون کیوتی کلاس QMessageBox رو براتون در نظر گرفته. نکته ای که هست شما میتونید از این کلاس یه شی بسازین و به تناسب نیازتون اینکنشو ست کنید .یا دکمه براش اضافه کنید . متن اصلی شو تغییر بدین و از این کار ها . ولی یه راه راحتر هم وجود داره . توابعی از این کلاس موجودند که استاتیک هستند یعنی نیازی به شی برای فراخونی شون نیست . استفاده از این توابع در اکثر مواقع نیازتون رو مرتفع میکنه. این توابع عبارتند از:
QMeesageBox::question : برای پرسش یک سوال از کاربر استفاده میشه.

QMessageBox::information : برای رساندن یه پیغام خبری به کاربر استفاده میشه.

QMessageBox::warning :برای هشدار دادن به کاربر استفاده میشه.

QMessageBox::critical :برای پیام خطا دادن به کاربر استفاده میشه.


کد:
int respond= QMessageBox::question(this,
 "Quit","Are you sure?",
 QMessageBox::Yes|QMessageBox::Default,
 QMessageBox::No|QMessageBox::Escape);
if (respond != QMessageBox::Yes)
{
 //do something
}
else
{
 //do somethnig
}
 

خوب سوال پرسیدن رو با هم بررسی میکنیم . همون طور که میبینید تابع question با چند پارامتر صدازده میشه. پارامتر اول برای تعیین Parent این دیالوگ هست . پارامتر دوم تعیین caption یه جعبه متن همون عنوان بالای پنجره یه دیالوگ . پارامتر سوم برای تعیین متن اصلی و در واقع سوال پرسیده شده. برای تعیین دکمه ها هم از پارامترهای ارسالی بعدی استفاده میکنیم. لیست دکمه هایی که میتونید برای این تابع ارسال کنید در assistant موجود هست.
خوب این تابع یه دیالوگ سوال رو نمایش میده و دکمه ای که کاربر کلیک کرده رو برمیگردونه . پس بعد از اینکه کاربر یه دکمه ای از سوال پرسیده شده رو کلیک کرد مقدارش در respond قرار میگیره. چون دکمه در QMessageBox به صورت enum هستش میتونید مقدار بازگشتی رو توی یه متغیر از جنس int بریزید و بعد با QMessageBox::Yes تستش کنید . اگه برابر بود یه کاری انجام بده و اگه نه یه کار دیگه .
خوب انواع دیگه message box در ادامه بحث خواهد شد.
خسته نباشید.




داغ کن - کلوب دات کام
نظرات() 

دیالوگ ها بخش دوم

نویسنده :سعید دادخواه
تاریخ:جمعه 8 بهمن 1389-02:08 ق.ظ

دیالوگ هایی که مدال نیستند Non-Modal Dialogs
در تمام موارد هم نمیشه از Modal dialogs استفاده کرد . بعضی از مواقع کارایی دیگه ای مد نظر ماست .مثال خوبش دیالوگ های سرچ درون یه ویرایشگر متن هست . در این مواقع کاربر نیاز داره که همزمان با هر دو بخش برنامه یعنی هم document و هم دیالوگ سرچ بتونه ارتباط داشته باشه. در مواقعی که شما یه دیالوگ رو با هدف Non modal dialog پیاده سازی کردین باید از تابع show برای نمایش اون استفاده کنید . نکته بسیار مهم این است که تابع show بلافاصله برمیگرده و ارتباط شما با دیالوگ باید با استفاده از سیگنال ها اسلات ها انجام بشه. خوب یه نکته مهم دیگه اینکه : شما اگه توی یه تابعی نیاز به یه دیالوگ داشتین ، اگه non modal هستش شما حتما باید اونو با new ایجاد ش کنید در غیر این صورت با برگشت بلا فاصله show و خروج از تابعی که این شی رو توش ساختین ، دیالوگتون از بین میره اما اگه شما modal هستش میتونید اونو یا با New یا روی استک بگیرید.( چون تابع exec تا زمانیکه دیالوگ هستش بر نمیگرده ).


داغ کن - کلوب دات کام
نظرات() 

دیالوگ ها بخش اول

نویسنده :سعید دادخواه
تاریخ:جمعه 8 بهمن 1389-02:04 ق.ظ

دیالوگ ها
از این لحظه وارد قسمت دیالوگ ها میشیم. دیالوگ ها فرم هایی هستند که برای ارتباط با کاربر در حین برنامه مورد استفاده قرار میگیرند . دیالوگ ها انواع مختلفی دارند و یا ممکنه جاهای مختلفی مورد استفاده قرار بگیرند. با توجه به اینکه کجا استفاده میشند باید ویژگی خاصی داشته باشند. مثلا در مورد یه فرم تنظیمات که باید با دیالوگ ها در کیوتی ساخته بشند تا زمانی که کاربر این دیالوگ را تایید نکنه نباید بشه به برنامه اصلی برگشت .اما مثلا در یه دیالوگ سرچ دیگه این قضیه صادق نیست همون طور که در برنامه هایی مثل اکسپلورر ها دیدین دیالوگ هم زمان با برنامه اصلی فعال هست ( راستی این که میگم دیالوگ و برنامه اصلی شاید تلقین بشه که برنامه ما و دیالوگ جدا از هم هستند که این طور نیست برای تمایز بینشون از این لفظ استفاده کردم وگرنه این دو در یک برنامه هستند ) با این حساب به دیالوگ با انواع مختلف نیاز مندیم :

دیالوگ های مدال Modal Dialogs
برخی از مواقع در برنامه ها دیدین که برنامه با رسیدن به بعضی از دیالوگ ها اصطلاحا بلاک میشه و تا زمانی که ارتباط کاربر با اون دیالوگ برقرار بقیه برنامه قابل دسترسی نیست .در این دیالوگ ها معمولا چیزایی قرار داده میشه که برنامه قبل از ادامه به کارش نیاز داره اونا رو بدونه . مثلا همین الان ctrl+o رو بزنید محاله بتونید تازمانیکه دیالوگ open باز هستش با قسمت های دیگه ارتباط برقرار کنید.به این دیالوگ ها Modal گفته میشه .

زمانی که شما یه شی از کلاسی که پایه اش QDialog باشه بسازید چیزی به شما نمایش داده نمیشه (درست مثل widget ها). با استفاده از تابع exec عضو کلاس QDialog شما در واقع دیالوگتون رو نمایانش میکنید یک . دوما یه event loop جدید برای اون دیالوگ ایجاد میکنید .بنابر این این شباهت اسم تابع گفته شده با تابع عضو کلاس QApplication کاملا قابل تفسیره . با اجرای این تابع دیالوگ شما نمایش داده میشه و در ضمن قسمت های دیگه برنامه هم بلاک میشه

کد:
 

QFileDialog dialog; int status = dialog.exec();
مثلا کد بالا رو ببینید . قبلا QFileDialog رو دیده بودیم . با ساختن یه شی ازش و exec کردن اون دیالوگ ما نمایش داده میشه و در ضمن تا زمانی که از دیالوگ نمایش داده شده یا با استفاده از تابع accept و یا reject ( توضیح داده میشوند ) خارج نشیم تابع exec باز نخواهد گشت. یعنی دستورات بعد از این تابع ، بعد از اینکه دیالوگ بسته شد اجرا میشند.
خوب تابع exec با دو مقدار میتونه برگرده . یا قبول دیالوگ یا رد دیالوگ . فرضا ما میخواهیم یه سری تنظیمات رو اعمال کنیم اگه مقدار بازگشتی قبول بود اعمال کنیم و اگه رد بود اعمال نکنیم . این مقادیر با دو enum قابل تشخیص هستند . QDialog::Accept و QDialog::Reject . این دو در if قابل استفاده هستند.
در ضمن وقتی از QDialog ارث بردیم و داریم در این کلاس کد مینویسیم میتونیم با تابع accept عضو کلاس QDialog دیالوگمون رو با مقدار بازگشتی QDialog::Accept ببندیم و تابع reject() برای بستن دیالوگ با مقدار QDialog::Reject استفاده میشه.



داغ کن - کلوب دات کام
نظرات() 

چگونه لقب خوره کامپیوتر را بدست بیاوریم

نویسنده :سعید دادخواه
تاریخ:چهارشنبه 6 بهمن 1389-09:17 ق.ظ

سلام دوستان

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

ادامه مطلب

نوع مطلب : گوناگون 

داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت هشتم

نویسنده :سعید دادخواه
تاریخ:چهارشنبه 6 بهمن 1389-08:29 ق.ظ

QMainWindow قسمت هشتم
نوار وضعیت Status bar
بنام خدا
خوب در جلسه قبلی در مورد کار با فایل ها در کیوتی و همچنین کار با دیالوگ های استاندارد صحبت کردیم . این قسمت هم سعی داریم که اول اسلات save رو با هم بررسی کنیم و بعدش کار با status bar یا نوار وضعیت رو با هم بررسی کنیم.
کد:
void QNotePad::saveDocument() { QString fileName = QFileDialog::getSaveFileName(this, "Open", "", "Text Files (*.txt);;All Files(*.*)" ); QFile file(fileName ); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, tr("Application"), tr("Cannot write file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return; } QTextStream out(&file); out << m_plainTextEdit->toPlainText(); }
همون طور که مشاهده میکنید گرفتن یه آدرس برای ذخیره یه فایل مثل بازکردنه . با تابع getSaveFileName که عضو کلاس QFileDialog هستش و در ضمن استاتیک هست این کار قابل انجام هست. بقیه کد هم که خیلی ساده هست هم تکراری است و هم چیزی برای گفتن نداره . در مورد toPlainText فقط توضیح بدم که چون textEdit ها میتونن متن با فرمت داشته باشند (Rich Text) به همین دلیل ممکنه متنشون ساده ساده هم نباشه . با استفاده از این تابع من در واقع دارم متن ساده رو بدست میارم یعنی متنی که هیچ فرمتی نداره . 
برای مشاهده status bar به ادامه مطلب برین


ادامه مطلب


داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت هفتم

نویسنده :سعید دادخواه
تاریخ:دوشنبه 4 بهمن 1389-09:16 ق.ظ

QMainWindow قسمت هفتم
کار با دیالوگ های استاندارد و فایل ها

سلام دوستان امید وارم که صبح خوبی رو شروع کرده باشید .

در این قسمت قصد داریم اسلات های save و open رو درست کنیم. خوب در این صورت به یک سری کلاس هایی بر میخوریم که در کیوتی با نام Standard Dialogs شناخته میشند . دیالوگ های استاندارد مجوعه ای از کلاس ها هستند که ما رو برای انجام برخی از کارهای استاندارد یاری میکنند . مثلا اگه شما نیاز به گرفتن یه فونت دارین برای یه جای برنامه تون کیوتی کلاسی داره که شما رو برای انتخاب یه فونت راحت میکنه . یا اگه تو برنامه تون نیاز دارین که انتخاب یه رنگ به کاربر سپرده بشه . خوب بهترین کار ممکن اینه که یه پالت رنگ به کاربر نمایش بدین و بعدش بخواین که رنگو انتخاب کنه . باز هم دیالوگی برای این کار هست. اما دیالوگ استانداردی که ما در این قسمت نیاز داری دیالوگ گرفتن یه آدرس برای باز کردن متنیش در برنامه است . همچنین نیاز به دیالوگی داریم که یه آدرس به ما برای ذخیره فایلمون بده. در ضمن در این قسمت نیاز به کار با فایل ها بدر کیوتی داریم . برای کاربا فایل ها در کیوتی کلاس هایی تعبیه شده که اساس همگی اونا کلاسی است به نام QIODevice .

خوب اسلات openDocument تا اینجا به صورت زیر خواهد بود

کد:
void QNotePad::openDocument()
{
    QString fileName =
            QFileDialog::getOpenFileName(this, "Open", "", "Text Files (*.txt);;All Files(*.*)" );
    if( !QFile::exists(fileName))
        return;

    QFile file(fileName );

    if (!file.open(QFile::ReadOnly | QFile::Text)) {
             QMessageBox::warning(this, tr("Application"),
                                  tr("Cannot read file %1:\n%2.")
                                  .arg(fileName)
                                  .arg(file.errorString()));
             return;
         }
    QTextStream in(&file);
    m_plainTextEdit->setPlainText(in.readAll());

}
ادام مطلب رو از دست ندین
ادامه مطلب


داغ کن - کلوب دات کام
نظرات() 

ماوس های غیر طبیعی

نویسنده :سعید دادخواه
تاریخ:یکشنبه 3 بهمن 1389-10:53 ق.ظ

سلام 

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

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

preview Unusual Computer Mice You Probably Havent Seen Before

ادامه مطلب

نوع مطلب : گوناگون 

داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت ششم

نویسنده :سعید دادخواه
تاریخ:یکشنبه 3 بهمن 1389-09:12 ق.ظ

سلام .خوب دوستان امید وارم که تا حالا خسته نشده باشید و اماده مطالب جدید تری از کیوتی باشید
در جلسات قبل یکی از مهمترین موجودیت های یه برنامه با واسط کاربر گرافیکی رو با هم دیدیم . یعنی طراحی منو . در این قسمت قصد داریم یکی دیگه از بخش های لازم و مورد نیاز یه برنامه گرافیکی رو با هم ببینیم .تولبار. در این جلسه همچنین قصد داریم که به action هایی که در جلسات قبلی ایجاد کردیم جان بدهیم .یعنی اینکه کار دلخواه ما رو انجام بدن.

خوب بهتره کد های این جلسه رو ببینید. اول فایل QNotePad.h . بعضی از قسمت ها حذف شدند.

کد:
#ifndef QNOTEPAD_H #define QNOTEPAD_H #include <QMainWindow> class QPlainTextEdit; class QAction; class QNotePad : public QMainWindow { Q_OBJECT; public: QNotePad(); private: . . . void createMenus(); void createToolbars(); void createConnections(); private slots: void newDocument(); void openDocument(); void saveDocument(); };
در فایل QNotePad.cpp بخش های مهم به صورت زیر هستند.
کد:
void QNotePad::createToolbars() { QToolBar *mainToolbar = new QToolBar( this ); mainToolbar->addAction( m_newFileAction ); mainToolbar->addAction( m_openFileAction ); mainToolbar->addAction( m_saveFileAction ); mainToolbar->addAction( m_exitAction ); addToolBar( mainToolbar ); }
خوب برای ساختن یه تولبار باز هم از کلاسی که در کیوتی به این منظور ایجاد شده استفاده میکنیم . و اون کلاس QToolBar هستش که یه شی ازش میسازیم و تنها کار مورد نیاز اضافه کردن اکشن هایی است که قبلا اونارو توی ساختن منو ها ساختیم . با تابع addAction اونارو به تولبار مون اضافه میکنیم . با تابع addToolBar عضو کلاس QMainWindow هم میتونیم یک تولبار رو به main window خودمون اضافه کنیم . 

برای اینکه بتونیم از صدا زده شدن یه اکشن با خبر بشیم سیگنال triggered عضو کلاس QAction باید استفاده بشه . این سیگنال زمانی emit میشه که اکشن ما به یه نحوی صدا زده شده باشه یا با استفاده از منو ها یا با استفاده از تولبار یا ... . پس تابع createConnections ما به صورت زیر در میاد.

کد:
void QNotePad::createConnections() { connect( m_newFileAction, SIGNAL(triggered()), SLOT(newDocument())); connect( m_openFileAction, SIGNAL(triggered()), SLOT(openDocument())); connect( m_saveFileAction, SIGNAL(triggered()), SLOT(saveDocument())); connect( m_exitAction, SIGNAL(triggered()), this, SLOT(close()) ); }
نکته ای که هست در تابع connect اگه گیرنده اسلات کلاس جاری باشه this نیازی به ذکر اون نیست. با تعریف هر یک از این اسلات ها کار دلخواه ما انجام خواهد شد. خوب اینم یه تعریف ساده از اسلات newDocument 

کد:
void QNotePad::newDocument() { m_plainTextEdit->setPlainText(""); }
خوب اسلات های دیگه بیشتر بحث داره که بعدا با هم بحث میکنی


داغ کن - کلوب دات کام
نظرات() 

پاسخ نظرات

نویسنده :سعید دادخواه
تاریخ:یکشنبه 3 بهمن 1389-07:59 ق.ظ

ممنون از دوستانی که نظر ارسال کردند .

سهیل:ممنون از زحماتتون
جواب‌ : خواهش میکنم دوست عزیز وبلاگ خودتونه


نازی: مطالبتون خیلی مفیده اما یکم کمه
جواب‌ : مطمئنید کمه . درسته اما هر روز مطالب به روزمیشند. باز هم ممنون


امیر: چطوری به main window تولبار اضافه کنم
راستی ممنون

جواب‌ : ان شاء الله در ادامه مطالب این موضوع رو هم پوشش میدیم.ممنون از نظرتون.


خواجوند:
سلام اکه امکانش هست یه کم مفصل تر توضیح بدین.من دانشجوی ترم 1دانشگاه شهید بهشتی هستم و پروژه آخر ترممون نوشتن یه بازی با کیوت هست و15ام بهمن تحویل پروژه اس.بازی یه سری مستطیل با رنگای مختلف هست که وقتی روی مستطیل های هم رنگ کلیک میکنیم میترکن.اگه میشه کمکمون کنین. واقعا ممنون از مطالب خوبتون

 جواب :  ممنون دوست عزیز . کارهای گرافیکی دوبعدی در کیوتی با استفاده از Qt Graphics Framework انجام میشه . در این محیط شما یک سن (Scene) برای رسم اشیا و یک view برای نمایش سن و تعدادی آیتم گرافیکی دارین . کار با این محیط بسیار راحت و ساده خواهد بود. ان شاء الله آموزش کاملشو بعدا تو سایت خواهیم داشت ولی برای یک آموزش مختصر میتونید به این مقاله که بنده به صورت خیلی مختصر نوشتم مراجعه کنید. در ضمن لطفا سوالتون رو دقیق مشخص کنید من باید چی رو براتون توضیح میدادم. ممنون از نظرتون


Alir3z4
نه باس آخرش میگفتی،
ای كسانی كه ++visual c كار میكنید، ایمان بیاورید 
جزییات رو خوب توضیح فرمودی!
مرسی

جواب :‌بله با نظر و پیشنهادتون موافقم . ممنون از نظرتون




داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت پنجم

نویسنده :سعید دادخواه
تاریخ:شنبه 2 بهمن 1389-09:17 ق.ظ

با سلام خدمت دوستان عزیز
در قسمت قبلی تونستیم که منو رو به mainwindow اضافه کنیم . حالا قصد داریم به اکشن های داخل منو ها آیکن اضافه کنیم و بعد اونا رو به یه toolbar هم اضافه کنیم.
برای استفاده از منابع (Resources) در برنامه دو راه داریم یا آنها را در پوشه هایی کنار برنامه بذاریم یا اینکه از سیستم منابع کیوتی (Qt Resources system ) استفاده کنیم . گزینه اول مشکلاتی داره از جمله اینکه فایل های شما در دسترس کاربر هست و یا ممکنه از بین بره . اما همون طور که توی بخش کامپایلر منابع کیوتی گفته شد . شما میتونید این فایل ها رو در درون فایل اجرایی تعبیه کنید (Embedded) .در این صورت شما به فایل هاتون دسترسی دارین و دیگران نه !
خوب برای اینکه بتونین از سیستم منابع کیوتی استفاده کنید باید یه فایل دیگه به پروژه تون اضافه کنید با پسوند qrc که با استفاده از گزینه 
File->New File or projects->Qt ->Qt Resource File
قابل اضافه شدن به پروژه هست. خوب با اضافه شدن این فایل به پروژه و کلیک کردن روش صحفه برای شما باز میشه که کار اضافه کردن منبع رو به پروژه راحت میکنه. در مورد منابع با دو تا اسم و مفهوم جدید روبرو هستیم . یکی prefix ودیگری alias . در مورد اولی باید بگم که prefix در واقع ابزاری برای پوشه بندی مجازی در یک فایل res هستش . با این کار و با اضافه کردن prefix شما میتونید تصاویر تون رو به دسته های مختلف طبقه بندی کنید.


البته میتونید یه prefix بینام هم داشته باشید . خوب با کلیک بر روی گزینه Add files شما میتونید هر نوع فایلی رو به عنوان منبع به برنامه تون اضافه کنید . من چندتا آینکن به برنامه ام اضافه کردم. بهتره منابع تون رو توی یه پوشه به نام Resources در کنار فایل های سرس برنامه تون اضافه کنید . در ضمن در مسیر نصب کیوتی و در پوشه Examples شما میتونید آیکن های متدوال و مورد نیاز رو پیدا کنید.

خوب تا اینجا من و البته امید وارم شما به پروژه ام چندتا منبع اضافه کردم . وقت استفاده از اوناست

کد:
void QNotePad::createMenus()
{
    QMenu *fileMenu = menuBar()->addMenu("File");
    m_newFileAction = fileMenu->addAction("New");
    m_newFileAction->setIcon(QIcon(":/menu_icons/Resources/filenew.png"));
    m_newFileAction->setShortcut( QKeySequence::New );

    m_openFileAction = fileMenu->addAction("Open");
    m_openFileAction->setIcon(QIcon(":/menu_icons/Resources/fileopen.png"));
    m_openFileAction->setShortcut(QKeySequence::Open);

    m_saveFileAction = fileMenu->addAction("Save");
    m_saveFileAction->setIcon(QIcon(":/menu_icons/Resources/filesave.png"));
    m_saveFileAction->setShortcut(QKeySequence::Save);

    m_exitAction = fileMenu->addAction("Exit");
    m_exitAction->setIcon(QIcon(":/menu_icons/Resources/delete.png"));
    m_exitAction->setShortcut(QKeySequence("Ctrl+Q"));
}

خوب این تابعی که قبلا نوشتیم رو یه کم تغییر دادیم تا نتایج دلخواه حاصل بشه . اولین تغییر مربوط به استفاده از تابع setIcon مربوط به کلاس QAction هستش . که به اکشن ما یه ایکن نسبت میده . این تابع نیاز به یه شی از کلاس QIcon داره که خوب گرفته دیگه .
نحوه آدرس دهی یه منبع :یک دونقطه + prefix اون منبع + آدرس بعد از prefix .
به تصویر ضمیمه شده نگاه کنید و با نحوه آدرس دهی بالا انطباق بدین تا متوجه بشین.

برای کلید میانبر دادن به یک اکشن از تابع setShortcut استفاده میکنیم. این تابع یک شی از کلاس QKeySequence از ما انتظار داره . از طرفی کیوتی برای اینکه شما به راحتی بتونید به استاندارد کلید میانبر دهی کنید برای کلید های پر کاربرد enum در نظر گرفته که شما رو از دادن کلید به صورت صریح راحت میکنه . اما خوب امکانش هست که به صورت صریح این کارو انجام بدین که در آخرین setShortcut قابل مشاهده هست. ذکر این نکته مهمه که در آخرین setShortcut ما از یک شی از QKeySequence استفاده کردیم. این شی چند سازنده داره که یکیش از ما یه QString میگیره که کلید ترکیبی (‌یا غیر ترکیبی ) میانبر ماست.


داغ کن - کلوب دات کام
نظرات() 


شبکه اجتماعی فارسی کلوب | Buy Website Traffic | Buy Targeted Website Traffic