PDA

View Full Version : باز کردن یک پنجره جدید و غیر فعال شدن پنجره اصلی



arashz4
پنج شنبه 12 تیر 1393, 20:10 عصر
سلام
من میخام یه برنامه بنویسم که زمانی که پنجره دوم باز میشه پنجره اصلی غیر فعال بشه و نشه بهش دسترسی داشت و زمانی پنجره دوم بسته شد پنجره اصلی به حالت اول خودش برگرده
برای نمونه زمانی که QMessageBox باز میشه ما به پنجره اصلی دسترسی نداریم و تا زمانی دکمه OK یا هر چیز دیگه رو نزدیم پنجره اصلی فعال نمیشه ، من می خوام هم حالت به جای QMessageBox یک پنجره داشته باشه.
با سپاس.

حامد مصافی
پنج شنبه 12 تیر 1393, 20:33 عصر
پنجره دوم که از QDialog‌مشتق شده رو با متد exec باز کن

arashz4
پنج شنبه 12 تیر 1393, 21:53 عصر
چجوری با
متد exec باز کنم

کامبیز اسدزاده
پنج شنبه 12 تیر 1393, 22:05 عصر
چجوری با
متد exec باز کنم


یک Dialog ایجاد کرده و سپس به صورت زیر ازش استفاده کنید.


Dialog *MyDialog= new Dialog;
MyDialog->exec();

arashz4
پنج شنبه 12 تیر 1393, 22:16 عصر
بهم این خطا رو میده:

'class setting' has no member named 'exec'

کامبیز اسدزاده
جمعه 13 تیر 1393, 00:06 صبح
بهم این خطا رو میده:

'class setting' has no member named 'exec'


فایل های مربوط به Dialog رو دستی ایجاد کردین یا کلاس رو به طور کامل ساختین ؟

arashz4
جمعه 13 تیر 1393, 10:23 صبح
فایل های مربوط به Dialog رو دستی ایجاد کردین یا کلاس رو به طور کامل ساختین ؟
بله
من میتونم پنجره دوم باز کنم اما میخام پنجره اصلی غیر فعال بشه

کامبیز اسدزاده
جمعه 13 تیر 1393, 10:28 صبح
بله
من میتونم پنجره دوم باز کنم اما میخام پنجره اصلی غیر فعال بشه

کاری رو که گفتم انجام بدین خب ! دیالوگ رو نمونه گیری کنید و با متد exec مثل کدی که دادم اجرا کنید.
اگر خطا میگیرید مشکلی این وسط وجود داره که بهتره نمونه کارتون رو بزارید دقیقا بگم اشتباهتون کجاست.

arashz4
جمعه 13 تیر 1393, 11:01 صبح
کاری رو که گفتم انجام بدین خب ! دیالوگ رو نمونه گیری کنید و با متد exec مثل کدی که دادم اجرا کنید.
اگر خطا میگیرید مشکلی این وسط وجود داره که بهتره نمونه کارتون رو بزارید دقیقا بگم اشتباهتون کجاست.
برفرمایید:
Download (http://uptobox.com/1k39f4iqq46v)

کامبیز اسدزاده
جمعه 13 تیر 1393, 11:14 صبح
برفرمایید:
Download (http://uptobox.com/1k39f4iqq46v)
خب همونطور که فکرشو میکردم شما از Widget استفاده کردین.
شما برای اینکه از متد exec استفاده کنید باید فرمتون از نوع QDialog باشه نه QWidget.

روش ساخت فرم های که به صورت Dialog هستند در ساده ترین صورت به این روش هست : راست کلیک روی پروژه و بعد گزینه Add New و سپس زبانه Qt و انتخاب Qt Designer form class و سپس در قسمت Template\forms نوه فرم رو QDialog انتخاب کنید.

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

arashz4
جمعه 13 تیر 1393, 11:22 صبح
خیلی ممنون یه پرسش دارم QDialog با QWidget چه فرقی داره؟

کامبیز اسدزاده
جمعه 13 تیر 1393, 21:06 عصر
خیلی ممنون یه پرسش دارم QDialog با QWidget چه فرقی داره؟

QWidget یک کلاس پایه برای تمام عناصر GUI در ماژول QtWidgets هستش توسط این کلاس میتونید پنجره خودتون رو تشکیل بدین و معمولا برای ساخت فرم های پایه بعد از فرم اصلی یعنی QMainWindow مورد استفاده قرار میگیرد.

ولی QDialog معمولا مناسب هستش برای فرم های خاصی مانند دریافت ورودی در بین دیگر فرم ها یا مثلا اگه بخوام مثال بزنم فرم تماس با ما , درباره ما , فرم مربوط به تنظیمات خاص و ... استفاده میشود.

معمولا نیاز هستش که از خاصیت Top Form استفاده کنید که در این صورت بهترین انتخاب QDialog هستش.

برای تکمیل کردن توضیحات این مورد رو هم اضافه کنم : QMainWindow
اینم معمولا برای ساخت فرم اصلی که دربرگیرنده رابط کاربری یا والد اصلی APP خواهد بود مورد استفاده قرار میگیره یعنی به ترتیب QMainWindow و بعد QWidget و در نهایت QDialog مورد استفاده در رابط کاربری قرار میگیره.