وراثت
-
p{direction:rtl; text-align:right}. ممنون محسن جان
مصطفی جان ممنون بابت کدت اما نتونستم کامپایلش کنم میشه کد رو برام آپلود کنی؟p{direction:rtl; text-align:right}. توی این خط
@class myform : public QWidget , public Ui_Form@
p{direction:rtl; text-align:right}. خطا داشتم که با این جایگزینش کردم
@class myform : public QWidget , public Ui_myform@p{direction:rtl; text-align:right}. این رو هم نفهمیدم
@myform::myform( QWidget *parent, Qt::WindowFlags f ) :
QWidget( parent, f )@p{direction:rtl; text-align:right}. اون f چیه
-
p{direction:rtl; text-align:right}.
https://github.com/bs994/example1
اینجا سورس اصلی رو اپ کردم
Public Ui_Form :
اونو واسه این گذاشته بودم که بتونم از تو کلاس mainWindow به ویجت های کلاس فرمم دسترسی مستقیم داشته باشم
QT::WindowFlags :
http://doc.qt.nokia.com/4.7-snapshot/widgets-windowflags.html -
p{direction:rtl; text-align:right}. خب نصف مشکل حل شد
فقط یه چیز برای برگشت ارتباط باید چه کرد؟
مثلا توی برنامه شما اگه بخوام با کلیک روی لیبل توی ویجت یه چیزی توی مین ویندو مثل متن دکمه رو عوض کنم چظور؟
برای ارتباط دوطرفه راهی پیدا نکردمp{direction:rtl; text-align:right}. البته این کارها رو کردم ولی به نتیجه ای نرسیدم
اول توی MainWindow یه اسلات برای تغییر متن دکمه گذاشتم
بعد یه سیگنال کلیک برای لیبل توی myForm که همون ویجت دوم باشه تعریف کردمp{direction:rtl; text-align:right}. این که کار نمیده
Mainwindow::changeBtnText();p{direction:rtl; text-align:right}. نمیشه هم دوباره توی myForm یه شیء جدید از MainWindow ساخت.
-
p{direction:rtl; text-align:right}. خب من از راه سیگنال و اسلات تونستم یه کارایی بکنم
باید توی فرم اول یه ارتباط برقرار کنم بین یه سیگنال از فرم دوم و یه اسلات از فرم اول
این طوری هم متغیرها private میمونن و هم نیازی نیست دوباره توی فرم دوم یه شیء از فرم اول بسازیمp{direction:rtl; text-align:right}. اما برنامه خودم نمیدونم چرا زمان اجرا کردن فرم دوم هنگ میکنه و مینویسه یه خطای غیرمنتظره رخ داده
از توی Debugger هم چیزی نفهمیدمp{direction:rtl; text-align:right}. مصطفی جان میشه یه نگاهی بهش بندازی؟
http://www.mediafire.com/?foc7ybfxrkw08fu -
p{direction:rtl; text-align:right}.
برنامه دیدم خطاش Segmention fault ئه
خط 4 و 5 فایل options.cpp رو به این تغییر بده
@
Options::Options(QWidget *parent) :
QDialog(parent) , ui(new Ui::Options )
@p{direction:rtl; text-align:right}.
مشکل حل میشه
در ضمن تو options.h اینا اضافن
@ QPushButton *okButton;
QPushButton *cancelButton;
QGroupBox *gBoxTurn;
QGroupBox *gBoxMode;
QRadioButton *cpuRadio;
QRadioButton *playerRadio;
QRadioButton *p2pRadio;
QRadioButton *p2cRadio;
QVBoxLayout *topLayout;
QHBoxLayout *downLayout;
QVBoxLayout *layout;
QVBoxLayout *modeLayout;
QVBoxLayout *turnLayout;@ -
p{direction:rtl; text-align:right}. باید عضو هایی که می خوان تغییر کنند public باشند و شی بسازی یا اگه می بینی که زیاد داره از اصول مهندسی نرم افزار خارج میشه
همه رو تو یک کلاس بنویس یا از وراثت استفاده کن و اعضا رو protected بزار کلاس دومی اونا را ارث ببره
علی جان یه خورده وقت می بره بخوام کامل کنم سعیمو میکنم تا فردا یه سورس هم بذارم -
p{direction:rtl; text-align:right}. ممنون
منظورم همون مثال خودت بود که کوچیکه و زیاد وققتو نمیگیره
خیلی شرمنده میکنی مصطفی جان
من توی ارسال از فرم اول به فرم دوم موفق شدم با سیگنال و اسلات این کار رو بکنم ولی برای اینکه دیتای فرم دوم که توی اولی ساخته شده رو برگردونم مشکل دارم
طرز کار یکیه ولی نمیدونم چرا برای برگشت کار نمیکنه
اول می خواستم کلاس دوم رو از اولی به ارث ببرم بعد دیدم توی برنامه های بزرگ این کار رو نمیشه کرد یا اگه بشه اتلاف حافظه زیادی داریم
در مورد public کردن هم کد جالبی از آب در نمیادp{direction:rtl; text-align:right}. انشاءلله لینوکس رو شروع کنی ما توی فروم لینوکس جبران کنیم :)
-
p{direction:rtl; text-align:right}. علی جان مسئله وقت نیست (من نه دانشگاه میرم نه به طور جدی کار می کنم پشت کنکوری ام دعا کنید :D) خوشحال میشم کمکی کرده باشم
مشکل اینه که لپ تاپم دست کسیه
ببین با توجه به برنامه ای که من دیدم بهتر کلا کلاس Option رو حذف کنی و بیاریش تو کلاس mainWindow چون اصلا نیازی نیست یه فرم از پیش طراحی شده رو بیاری تو کدات
تو کلاس mainWindow بیا یه action برای وقتی که از منو ها options کلیلک شد درست کن و تو اون فرم رو بساز اعضاشم همونایی که تو options.h بود گفتم اضافین اونارو بزار و به اعضای mainWindow اضافه کن اون وقت متغیر هایی که جز mainwindow هستند براحتی توسط فرم جدید options که در حین برنامه ساخته شده تغیر داده میشند.
یعنی کافیه جای کلاس یهQWidget اضافه کنی و اونو نمایش بدی
هم از نظر TimeComplexity و هم از نظر memoryComplexity نسبت به قبلیا بهتر میشه