mhkaPR
mhkaPR
خواندن ۲ دقیقه·۲ سال پیش

چگونه در کیوت چند فرم را در یک فرم نشان دهیم

به نام خدای خلاقیت و شکوه

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

پس با من همراه باشید...


این سوال بسیار ساده حل میشه با فقط دو خط کد نوشتن برای نمایشش که من یکم بیشتر می نویسم تا راه حل رو بهتر ارائه بدم.

1- یه پروژه باز می کنیم.

2-یه فرم رو به برنامه ادد می کنیم (برای نمایشش توی فرم اصلی) طبق تصویر اون رو مثلا پر می کنیم.

نکته: خیلی خیلی مهمه که نوع فرم رو QWidget قرار بدین.
نوع فرم Qwidget باشه حتما!!!
نوع فرم Qwidget باشه حتما!!!



 مثلا توش چند تا  pushButton می زاریم
مثلا توش چند تا pushButton می زاریم



3-حالا یکی دیگه هم ایجاد می کنیم (برای سؤیچ کردن روی فرم ها)

اینو توش یه مشت lineEdit می زاریم.
اینو توش یه مشت lineEdit می زاریم.


4- توی فرم اصلی لازمه تو تا چیز قرار بدیم یکی یه دونه stacketWidget برای نمایش فرم ها دوم مثلا یه comboBox برای جا به جایی بین فرم ها:

یه کومبو باکس به بنام combobox و یک کیو استکت ویحت نام stacketwidgetChange و یک گروپ باکس برای ظاهر بهتر


4- حالا توی .h فرم اصلی میریم و توی private دو تا اشاره گر از فرم ها ایجاد می کنیم ( اینکلود یادتون نره)

... private Ui::multiForm *ui;// it is from before form1 *f1 = nullptr; form2 *f2= nullptr; };
نکته: علت این که اول nullptr میزارم اینه که می خوام از ایجاد اضافی فرم ها توی حافظه جلوگیری بشه (جلوتر خودتون می بینین)

حالا توی فرم اصلی می ریم و طبق تصویر زیر توی slot کومبوباکس میریم.

حالا با یه switch میگیم که:

void multiForm::on_comboBox_activated(int index) { switch (index) { case 1: if(f1 == nullptr) { f1 = new form1; ui->stackedWidgetChange->layout()->addWidget(f1); } ui->stackedWidgetChange->setCurrentWidget(f1); break; case 2: if(f2 == nullptr) { f2 = new form2; ui->stackedWidgetChange->layout()->addWidget(f2); } ui->stackedWidgetChange->setCurrentWidget(f2); break; } }

چند نکته:

1- اومدم و در فرم اصلی برای کومبو باکس سه تا آیتم ایجاد کردم تا روی اونا switch کنم
2- متد layout قابلیت های زیادی برای شما در اختیار قرار می دهد.
3- حتما QLayout را در .h فرم اصلی اینکلود کنید

اینم نمای پروژه:

اول برنامه
اول برنامه


فرم 1
فرم 1



فرم 2
فرم 2


ممنون که همراهی کردین

اینم لینک github برای دانلودش:

https://github.com/mhkaprogramer/multiForm_into_a_form.git



تا سوال بعدی و جواب بعدی خدانگهدار

فرمqtcppmultiformwidget in qt
شاید از این پست‌ها خوشتان بیاید