وراثت

Page  
2

April 30, 2012

silver silver
Lab Rat
84 posts

این کدی که دادی رو یه فرم براش ساختم و اسلات newDialog2() رو بهش اضافه کردم تا کار کرد
ممنون کارم راه افتاد باید برم ببینم میتونم رو برنامه خودم ازش استفاده کنم یا نه
لطف کردی :)

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

May 1, 2012

silver silver
Lab Rat
84 posts

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

البته این کارها رو کردم ولی به نتیجه ای نرسیدم
اول توی MainWindow یه اسلات برای تغییر متن دکمه گذاشتم
بعد یه سیگنال کلیک برای لیبل توی myForm که همون ویجت دوم باشه تعریف کردم

این که کار نمیده
Mainwindow::changeBtnText();

نمیشه هم دوباره توی myForm یه شیء جدید از MainWindow ساخت.

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

May 1, 2012

bs994 bs994
Lab Rat
39 posts

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

 Signature 

Real Eyes Realize Real Lies .

May 3, 2012

silver silver
Lab Rat
84 posts

خب من از راه سیگنال و اسلات تونستم یه کارایی بکنم
باید توی فرم اول یه ارتباط برقرار کنم بین یه سیگنال از فرم دوم و یه اسلات از فرم اول
این طوری هم متغیرها private میمونن و هم نیازی نیست دوباره توی فرم دوم یه شیء از فرم اول بسازیم

اما برنامه خودم نمیدونم چرا زمان اجرا کردن فرم دوم هنگ میکنه و مینویسه یه خطای غیرمنتظره رخ داده
از توی Debugger هم چیزی نفهمیدم

مصطفی جان میشه یه نگاهی بهش بندازی؟
http://www.mediafire.com/?foc7ybfxrkw08fu

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

May 4, 2012

bs994 bs994
Lab Rat
39 posts

برنامه دیدم خطاش Segmention fault ئه
خط 4 و 5 فایل options.cpp رو به این تغییر بده

  1. Options::Options(QWidget *parent) :
  2.     QDialog(parent) , ui(new Ui::Options )

مشکل حل میشه
در ضمن تو options.h اینا اضافن

  1.   QPushButton *okButton;
  2.     QPushButton *cancelButton;
  3.     QGroupBox *gBoxTurn;
  4.     QGroupBox *gBoxMode;
  5.     QRadioButton *cpuRadio;
  6.     QRadioButton *playerRadio;
  7.     QRadioButton *p2pRadio;
  8.     QRadioButton *p2cRadio;
  9.     QVBoxLayout *topLayout;
  10.     QHBoxLayout *downLayout;
  11.     QVBoxLayout *layout;
  12.     QVBoxLayout *modeLayout;
  13.     QVBoxLayout *turnLayout;

 Signature 

Real Eyes Realize Real Lies .

May 4, 2012

bs994 bs994
Lab Rat
39 posts

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

 Signature 

Real Eyes Realize Real Lies .

May 4, 2012

silver silver
Lab Rat
84 posts

ممنون عزیزم :)
چطور حواسم به این ui نبود :(
آره هنوز کامل نیست دارم کاملش می کنم

دیر رسیدم باز بحثی شد خبرم کن
gTalk:hitman2c47
yahooID:hitman2_c47

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

May 4, 2012

silver silver
Lab Rat
84 posts

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

میشه بگین چی کار کنم یا همون کد اولی رو که گذاشتین کاملش کنین

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

May 5, 2012

bs994 bs994
Lab Rat
39 posts

باید عضو هایی که می خوان تغییر کنند public باشند و شی بسازی یا اگه می بینی که زیاد داره از اصول مهندسی نرم افزار خارج میشه
همه رو تو یک کلاس بنویس یا از وراثت استفاده کن و اعضا رو protected بزار کلاس دومی اونا را ارث ببره
علی جان یه خورده وقت می بره بخوام کامل کنم سعیمو میکنم تا فردا یه سورس هم بذارم

 Signature 

Real Eyes Realize Real Lies .

May 5, 2012

silver silver
Lab Rat
84 posts

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

انشاءلله لینوکس رو شروع کنی ما توی فروم لینوکس جبران کنیم :)

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

May 5, 2012

bs994 bs994
Lab Rat
39 posts

علی جان مسئله وقت نیست (من نه دانشگاه میرم نه به طور جدی کار می کنم پشت کنکوری ام دعا کنید :D) خوشحال میشم کمکی کرده باشم
مشکل اینه که لپ تاپم دست کسیه
ببین با توجه به برنامه ای که من دیدم بهتر کلا کلاس Option رو حذف کنی و بیاریش تو کلاس mainWindow چون اصلا نیازی نیست یه فرم از پیش طراحی شده رو بیاری تو کدات
تو کلاس mainWindow بیا یه action برای وقتی که از منو ها options کلیلک شد درست کن و تو اون فرم رو بساز اعضاشم همونایی که تو options.h بود گفتم اضافین اونارو بزار و به اعضای mainWindow اضافه کن اون وقت متغیر هایی که جز mainwindow هستند براحتی توسط فرم جدید options که در حین برنامه ساخته شده تغیر داده میشند.
یعنی کافیه جای کلاس یهQWidget اضافه کنی و اونو نمایش بدی
هم از نظر TimeComplexity و هم از نظر memoryComplexity نسبت به قبلیا بهتر میشه

 Signature 

Real Eyes Realize Real Lies .

May 5, 2012

bs994 bs994
Lab Rat
39 posts
silver wrote:
انشاءلله لینوکس رو شروع کنی ما توی فروم لینوکس جبران کنیم :)

داستانش چیه کدوم فروم لینوکس؟ اینجانب از عشــــــــِّاق مخلص لینوکس هست

 Signature 

Real Eyes Realize Real Lies .

May 5, 2012

silver silver
Lab Rat
84 posts

ببین با توجه به برنامه ای که من دیدم بهتر کلا کلاس Option رو حذف کنی و بیاریش تو کلاس mainWindow چون اصلا نیازی نیست یه فرم از پیش طراحی شده رو بیاری تو کدات

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

داستانش چیه کدوم فروم لینوکس؟ اینجانب از عشــــــــِّاق مخلص لینوکس هست

خب پس گل بود به سبزه هم آراسته شد. خیلی مخلصیم :)
من فدورا کار میکنم. توی فروم فدورا هم با همین اسم silver می‌تونی پیدام کنی.
چون دیدم توی ویندوز کد میزنی گفتم حتما از لینوکس استفاده نمی‌کنی

Bingo
نوشتمش
اینم کدش

form1.h

  1. #ifndef FORM1_H
  2. #define FORM1_H
  3.  
  4. #include <QMainWindow>
  5. #include "form2.h"
  6.  
  7. namespace Ui {
  8.     class Form1;
  9. }
  10.  
  11. class Form1 : public QMainWindow
  12. {
  13.     Q_OBJECT
  14.  
  15. public:
  16.     explicit Form1(QWidget *parent = 0);
  17.     ~Form1();
  18.  
  19. private slots:
  20.     void on_pushButton1_clicked();
  21.     void addToForm1(QString text);
  22.  
  23. signals:
  24.     void sendToForm2(QString text);
  25.  
  26. private:
  27.     Ui::Form1 *ui;
  28.     Form2 *f2;
  29. };
  30.  
  31. #endif // FORM1_H

form1.cpp

  1. #include "form1.h"
  2. #include "ui_form1.h"
  3.  
  4. Form1::Form1(QWidget *parent) :
  5.     QMainWindow(parent),
  6.     ui(new Ui::Form1)
  7. {
  8.     ui->setupUi(this);
  9.     f2=new Form2();
  10.     connect(f2,SIGNAL(sendToForm1(QString)),this,SLOT(addToForm1(QString)));
  11.     connect(this,SIGNAL(sendToForm2(QString)),f2,SLOT(addToForm2(QString)));
  12.     f2->show();
  13.  
  14.     connect(ui->exitButton,SIGNAL(clicked()),this,SLOT(close()));
  15. }
  16.  
  17. Form1::~Form1()
  18. {
  19.     delete ui;
  20. }
  21.  
  22. void Form1::on_pushButton1_clicked()
  23. {
  24.     sendToForm2(ui->lineEdit1->text());
  25. }
  26.  
  27. void Form1::addToForm1(QString text)
  28. {
  29.     ui->listWidget1->addItem(text);
  30. }

form2.h

  1. #ifndef FORM2_H
  2. #define FORM2_H
  3.  
  4. #include <QDialog>
  5.  
  6. namespace Ui {
  7.     class Form2;
  8. }
  9.  
  10. class Form2 : public QDialog
  11. {
  12.     Q_OBJECT
  13.  
  14. public:
  15.     explicit Form2(QWidget *parent = 0);
  16.     ~Form2();
  17.  
  18. signals:
  19.     void sendToForm1(QString text);
  20.  
  21. private slots:
  22.     void on_pushButton2_clicked();
  23.     void addToForm2(QString text);
  24.  
  25. private:
  26.     Ui::Form2 *ui;
  27. };
  28.  
  29. #endif // FORM2_H

form2.cpp

  1. #include "form2.h"
  2. #include "ui_form2.h"
  3.  
  4. Form2::Form2(QWidget *parent) :
  5.     QDialog(parent),
  6.     ui(new Ui::Form2)
  7. {
  8.     ui->setupUi(this);
  9. }
  10.  
  11. Form2::~Form2()
  12. {
  13.     delete ui;
  14. }
  15.  
  16. void Form2::on_pushButton2_clicked()
  17. {
  18.     sendToForm1(ui->lineEdit2->text());
  19. }
  20.  
  21. void Form2::addToForm2(QString text)
  22. {
  23.     ui->listWidget2->addItem(text);
  24. }

اینجا [mediafire.com] هم آپلودش کردم

مصطفی جان خیلی زحمت کشیدی. ممنون
محسن جان تو هم همینطور

خدا خیرتون بده :)

باید روی برنامه خودم تستش کنم. فقط یه سوال : وقتی می خوایم از چند تا کلاس برای فرم های برنامه استفاده کنیم این روش Signal و Slot سالم ترین روشه دیگه؟‌ منظورم قواعد شیء گراییه

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

May 6, 2012

bs994 bs994
Lab Rat
39 posts
silver wrote:
اولش همین طوری نوشتم ولی برای یادگرفتن این موضوع جداش کردم آخه من هر زبان برنامه نویسی جدیدی رو با نوشتن یه TicTacToe شروع می کنم ممنون قواعد شیء گراییه

خوب من راه های دیگه های هم به ذهنم رسید واسه اینکار
1- بیای از تابع دوست کلاس استفاده کنی اون تابع دوست دو تا کلاس باشه و با توجه به شی ای که از هردو می سازی می تونی به Private ها هم دسترسی داشته باشی
2- کلاس دومی رو کلاس دوست تعریف کنی مثل قبلی تقریبا
3- سازنده کلاس mainWindow رو overload کنی و وقتی که تو کلاس جدیدت شی از اون میسازی اون فراخونی شه ولی توش فرم جدید نسازی که تو این حالت باید option های بازی به صورت عضو استاتیک کلاس باشند که وقتی تغییر میدیش تو شی اصلی ساخته شده (تو تابع main) هم تغییرات ایجاد شه

silver wrote:
مصطفی جان خیلی زحمت کشیدی. ممنون

خواهش می کنم عزیزم

 Signature 

Real Eyes Realize Real Lies .

May 6, 2012

silver silver
Lab Rat
84 posts

سخت بود :) ممنون :)

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

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

Page  
2

  ‹‹ Qt 5.0 Alpha      اتصال به بانک اطلاعاتی ››

You must log in to post a reply. Not a member yet? Register here!