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

خبر های ساین بیتی

نویسنده :سعید دادخواه
تاریخ:شنبه 12 آذر 1390-11:02 ق.ظ

سلام

شروع آموزش ARM در وبسایت www.signbit.ir

شروع آموزش طراحی وبسایت با php, html5, ... در سایت www.signbit.ir

آموزش های کودا و بازی Peggle nights آپدیت شد.




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

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

بازی peggle night با کیوتی

نویسنده :سعید دادخواه
تاریخ:یکشنبه 6 آذر 1390-02:55 ق.ظ

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

آموزش مرحله به مرحله ساخت بازی peggle nights با استفاده از کیوتی در وبساتم www.signbit.ir شروع شد. حتما باهاش جلو بیاید.

موفق باشید



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

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

Events in Qt- Part C - Event Filtering

نویسنده :سعید دادخواه
تاریخ:یکشنبه 13 شهریور 1390-04:54 ب.ظ

موضوع : Events in Qt Part C - Event Filtering
مثال عملی : یه ویدجت با سه لاین ادیت در داخل اون که فشردن کلید space در اونا باعث انتقال Focus به لاین ادیت بعدی میشه .

یکی از ویژگی های بارز و مهم کیوتی اینه که شما میتونید یه شی از جنس [1] QObject رو مامور کنید پیام های یه QObject دیگه رو بگیره، حتی بدون اینکه اون کسی که پیام ها مالش بود متوجه بشه . بذارید توضیح بدم. فرض کنید شما می خواهید یه QLineEdit بسازید (منظورم اینه که ازش ارث ببرید و بعدش یه سری چیز بهش اضافه کنید) که وقتی روش کلیک شد یه کاری انجام بشه . همون طور که میدونید QLineEdit سیگنالی به نام clicked نداره بلکه برای انجام این کار باید mousePressEvent این QLineEdit جدیدمون رو ....

دانلود فایل pdf و فایل های پروژه این قسمت از اینجا



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

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

Events In Qt Part A

نویسنده :سعید دادخواه
تاریخ:جمعه 11 شهریور 1390-12:26 ق.ظ

 سلام در بخش بعدی برنامه نویسی کیوتی میریم سراغ مطالب یکم پیشرفته تر . از Event ها شروع میکنیم

Events رخدادها
رخدادها یا Event ها چه هستند ؟ سوال مهمی است . برای اینکه بیشتر بفهمیم که رخداد ها چه چیز هایی هستند اجازه بدید بیشتر در مورد اونا بدونیم. البته از دیدگاه ویندوزی !
ببینید برنامه های Consoleای که مینوشتیم راهی نداشتیم که با سیستم عامل ارتباط برقرار کنیم و به همین دلیل مثلا تابعی مثل scanf را برای گرفتن ورودی از کاربر صدا میزدیم. ولی در دنیای سیستم عامل های جدید این طور نیست. شما به واقعیت نزدیک تر میشوید . به چه صورت ؟ بذارید یه مثال بزنم . بچه ها رو دیدید که توی یه مسافرت طولانی آدم رو کلافه میکنن که رسیدیم ، رسیدیم؟ رسیدیم ؟ پس کی میرسیم؟ رسیدیم؟
وای آدم کلافه میشه و با صدای بلند میگیم نه عزیزم وقتی رسیدیم بهت میگم. صدا زدن تابعی مثل scanf مثل بچه ای میبینه که مرتب بگه رسیدیم، رسیدیم؟ بله شاید کاربر ساعت ها دلش نخواد یه مقدار برای برنامه ما ارسال کنه و تابع منتظر ورودی است. ولی در سیستم عامل ویندوز رویه یکمی فرق داره . ویندوز به شما میگه این قدر نگو ورودی ورودی ، هر وقت اومد بهت خبر میدم ! بله ویندوز هر وقت که خبری بشه بهتون پیام میده و خبرتون میکنه از یه واقعه (Event) .
پس یه خبرایی داره میشه ! ویندوز میخواد با شما ارتباط برقرار کنه و این ارتباط از طریق پیام هایی است که برای شما میفرسته . بذارید یکم بیشتر بدونیم . یعنی چی پیام میده به ما ؟ سوال خیلی خوبیه .
در برنامه های ویندوزی ما در برنامه مون یه تابعی به نام Window Procedure باید تعریف کنیم که شاهراه ارتباطی ما با ویندوزه. هر وقت ویندوز دلش خواست به ما پیام بده این تابع رو صدا میزنه و یه خبری به ما میده . مثلا میگه که کلید فلان زده شد. یا ماوس روی فلان نقطه شما زده شد . یامیگه که باباجون ! یه پنجره اومد روی شما و رفت کنار باید خودتو دوباره طراحی کنی ! از این پیاما میده . خوب برنامه ای که توی کیوتی ( شونصد بار دیگه هم که بگین کیوت درست تر تره ما با کیوتی بیشتر حال میکنی ام ) مینویسین ( البته توی ویندوز ) به همین صورته . یعنی ویندوز برای شما پیام میده . ای بابا دروغ نگو من که تا حالا از ویندوز پیامی دریافت نکردم !
درسته ! اصن کیوتی اومده همین کارو بکنه . چکار ؟ بعضی از چیزا رو از دید شما مخفی کنه و یه راه راحتتر براتون ایجاد کنه . مثلا یکیش همین پردازش رخداد ها ( پیام ها ) است. زمانیکه ویندوز پیام میده براتون کیوتی یکم ملایم تر ! خبرتون میکنه تا هر کاری که میخواید بکنید.
بذارید بحث رو باحال ترش کنیم ! سیگنال ها به نظرتون چی هستند ؟ اونا هیچی نیستند جز پیام ها که به شیوه خاصی اعلان میشند! یعنی چی ؟ ببینید قرار شد وقتی روی منِ دکمه کلیک شد ویندوز با پیامی من رو خبر کنه . خب من ِ دکمه هم شما رو با سیگنالی خبر میکنم. پس بذارید جمع بندی کنم : برخی از پیام های مهم به صورت سیگنال در اختیار ما قرار داده میشند تا راحتر تر باشیم . و برخی هم اگه قراره باهاشون کاری کنیم باید بریم سراغ بحث پردازش پیام ها ( رخداد) (Event Processing) .حالا یه سوال؟ میشه من از سیگنال یه پیام استفاده نکنم و بجاش از پیام به صورت مستقیم استفاده کنم؟ سوال خوبی بود . به صورت مستقیم مستقیم که نه . ولی میتونید از راه یکم مستقیم تر به نام پردازش رخداد ها استفاده کنید. مثلا میدونیم که دکمه سینگال clicked داره . در عین حال ما میتونیم رخداد کلیک شدن روی یه دکمه را خودمون تعریف کنیم که چه اتفاقی در جواب اون رخداد بیفته.
پس به اینجا رسیدیم که در ویندوز وقتی کاربر یه کاری کرد، ویندوز از طریق پیام به ما خبر میده. ما هم شاید بخواهیم در جواب اون پیام یه کاری انجام بدیم . انجام اینکارا توی کیوتی Event Handling یا Event Processing نام داره. مثلا تاحالا شده از خودتون بپرسید که چطور میشه مثلا وقتی روی یه ویدجت خالی کلیک میشه یه اتفاقی بیفته ؟ نپرسیدین ؟ واقعا ؟
قانون زیر رو حیفم اومد ترجمه کنم : As a rule, signals are useful when using a widget, whereas events are useful when implementing a widget.برای مثال وقتی داریم از دکمه استفاده میکنیم راحت تر هستیم که از سیگنال استفاده کنیم تا اینکه خودمون رو درگیر پیامهای ماوس کنیم.
زمانیکه اتفاقی می افته برای یه ویدجت که ویندوز براش پیام میفرسته مثلا فرض کنیم روی یه ویدجت کلیک میشه ، کارایی که قراره در جواب اون اتفاق انجام بشه توی یه تابعی قرار میگیره که با کلمه Event تموم میشه . مثلا چی ؟ فرض کنید روی ویدجت ما کلیک میشه در اینجا ما تابعی خواهیم داشت به نام mousePressEvent که هر دستوری داخلش بنویسیم برای ما اجرا میشه( البته هر مرتبه که روی ویدجت ما کلیک شد. ) این تابعها کجا بودند ؟ این تابع ها به صورت مجازی (virtual) در کلاس QWidget قرار دارند و ما با باز تعریف آنها (Re Implement) باعث میشیم که تابع ما به جای تابع اصلی صدا زده بشه. برخی مواقع هم تابعی که توی کلاس هستش کاری انجام نمیده . مثلا mousePressEvent داخل QWidget هیچ کاری انجام نمیده. از کجا فهمیدیم؟ از اینجا که با کلیک کردن روی یه ویدجت هیچ اتفاقی نمی افته. ولی اگه من بیام و این تابع رو باز تعریف کنم و توش یه دستوری بنویسم ، از این به بعد هر بار که من روی ویدجتم کلیک میکنم یه اتفاقی خواهد افتاد.
بذارید یه مثال ساده بزنیم. یه کلاس به برنامه تون اضافه کنید که از QWidget ارث برده باشه. حالا به فایل header خط زیر را اضافه کنید:

  1. protected:
  2.    void mousePressEvent(QMouseEvent *);

تعریفشون به صورت زیره

  1. void Widget::mousePressEvent(QMo
    {
    useEvent *)
  2.    QMessageBox::information( this, "Clicked", "I'm clicked!");
  3. }

حالا اون رو به صورت زیر تعریف کنید :
حالا یه شی از این کلاس جدیدتون بسازید و با تابع show اونو نمایش بدین و بعد روی ویدجتتون کلیک کنید .
حالا به عنوان تمرین یه کلاس از کلاس QPushButton ارث ببرین و تابع mousePressEvent اونو خودتون باز تعریف کنید ببینید چی میشه و چطور میشه حلش کرد ؟ ( سوال مهمی بودا)
فعلا...



نوع مطلب : گوناگون  کلاس های Qt 

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

بازی پرندگان عصبی با کیوتی

نویسنده :سعید دادخواه
تاریخ:شنبه 11 تیر 1390-04:12 ب.ظ

 

سلام . بازی زیر با استفاده از کیوتی نوشته شده که میتونید ببینیدش



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

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

کارهای گرافیکی دوبعدی با کیوتی بخش اول

نویسنده :سعید دادخواه
تاریخ:یکشنبه 5 تیر 1390-02:08 ق.ظ

سلام

همونطور که قرار بود ، گفتیم میخوایم باکس تو دی رو یاد بگیریم ولی خوب نیاز به یه سری مقدمه چینی داره مثلا : ما باید نحوه کار با کلاس های Qt Graphics View رو که برای کار های دوبعدی هست بلد باشیم. مجموعه ای از ویدیو ها رو برای آموزش این بخش در نظر گرفتم که بخش اولش رو تقدیم میکنم. برای مشاهده رو تصویر زیر کلیک کنید.

برای مشاهده اینجا رو کلیک کنید




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

کیوتی و Box2D

نویسنده :سعید دادخواه
تاریخ:یکشنبه 22 خرداد 1390-03:52 ب.ظ

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

دوباره به وبلاگ برگشتم و با دست پر D: .

اولا از دوست عزیزم علی جون تشکر میکنم که این Great tutorial رو برای ماگذاشت . در ادامه میخوایم وارد بحث خفن ساخت بازی های دوبعدی با کیوت بشیم . ولی قبلش نیاز داریم که با کتابخانه های گرافیکس ویو Qt Graphics Veiw و کتابخانه Box2D اشنا بشیم از این به بعد آموزش ها به صورت ویدیو خواهد بود .

ویدیو اول که یه Introduction هست رو ببینید.



نوع مطلب : گوناگون  کلاس های Qt 

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

QML چیست

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

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

QML چیست ؟

نمیدونم شما هم مثل من هستید یا نه . از چه نظر ؟ از این نظر که برنامه ای که طراحی میکنید سعی کنید واسط کاربری خشگلی داشته باشه . چون اکثر کاربرا بیشتر از اینی که به هسته برنامه توجه کنند به زیبایی برنامه توجه میکنن . خوب طراحی واسط های کاربری با استفاده از widget ها در کیوتی اگرچه که نیاز هایی رو رفع میکنه ولی انعطاف پذیری کمی داره . یعنی  اینکه اگه شما بخواهید محیطتون یکم انیمیشن داشته باشه خیلی باید تلاش کنید.

خوب اینجاست که وجود یک وسیله برای طراحی واسط کاربری ( User interface ) به شدت نیاز میشه . QML یا Qt Meta Object Language وسیله برای همین کاره . یعنی اینکه شما با اون به یک آزادی در طراحی واسط های کاربری میرسید . این زبان یه زبان براساس زبان ساده javascript هستش .خیلی ساده و بسیار لذت بخش. خوب من یه pdf ده صفحه ای در موردش ( مقدماتش ) براتون آماده کردم امید وارم خوشتون بیاد

راستی انجمن یادتون نره .

دانلود آموزش QML بخش اول



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

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

جواب به نظرات

نویسنده :سعید دادخواه
تاریخ:جمعه 13 اسفند 1389-09:47 ب.ظ

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

حمید
جمعه 29 بهمن 89 04:24

سلام
افسوس میخورم که چرا وبلاگ هایی مثل شما اینقدر کم هستن
لطفا اگه میشه یه ذره توضیح بدید که این qt برای موبایل چه جوریاست
با تشکر

ممنون از نظرت حمید عزیز . خوب برنامه نویسی موبایل کیوتی هم در ادامه آموزش ها قرار بود بهش برسیم چون فعلا خیلی سرم شلوغه یکم باید صبور باشید ولی حتما این کارو میکنم


 

 

شایان
سلام.آقا آموزش كیوت ،پی دی اف سوم رو نتونستم پیدا كنم .دیگه به صورت پی دی اف آموزش نمیزای؟خوب بودا.
موفق باشی
 
ممنون . چشم سعی میکنم آموزشا به صورت pdf باشه.
 

Alir3z4
دوشنبه 18 بهمن 89 06:02
agahia.com@gmail.com
مرسی از جواب سریع!
فرضا در خط فرمان لینوكس واسه بدست آوردن برنامه های اجرا شده از این دستور استفاده میكنیم
top -u root خب خروجی در همون خط فرمان برگردانده میشه
حالا فك كنم دو راه هست
یكی اینكه مقدار به خط فرمان ارسال كنیم
و یا اینكه بصورت مستقیم با برنامه top ارتباط برقرار كنیم

امیدوارم منظورم رو رسونده باشم
مرسس
 
علی رضای عزیز شما رو که اصلا دیگه روم نمیشه جوابتو بدم شرمنده از این همه تاخیر چشم مثالشو براتون میذارم.


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

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

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 در ادامه بحث خواهد شد.
خسته نباشید.




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

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());

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


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

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(""); }
خوب اسلات های دیگه بیشتر بحث داره که بعدا با هم بحث میکنی


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


  • تعداد صفحات :2
  • 1  
  • 2  
شبکه اجتماعی فارسی کلوب | Buy Website Traffic | Buy Targeted Website Traffic