فعال کردن باتون Maximize هنگام گذاشتن maximum size در Qt - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

فعال کردن باتون Maximize هنگام گذاشتن maximum size در Qt

+1 امتیاز
سلام من به یک مشکلی برخوردم این که من QMainWindow اصلی برنامم رو  maximum size شو از طریق designer بصورت 500 *300 دادم .

حالا باتون maximize  توی تولبار بالا سمت راست غیر فعال شده !

من می خوام فرم به این شکل باشه که اولا maximize فعال بمونه ثانیا  اگر سایز فرم مثلا 400 در 200 بود کاربر وقتی maximize رو زد سایز 500 در 300 بشه .

ممنون .
سوال شده بهمن 16, 1392  بوسیله ی هفت خط (امتیاز 116)   1 10 17
می تونی پنجره رو به شکل  SplashScreen بسازی بعد خودت تولبار بالاشو درست کنی برای maximize minimize exit هم از 3 تا باتون با ظاهر شبیه چیزی که توی اون سیستم عامل هست  استفاده کن .

2 پاسخ

+1 امتیاز
 
بهترین پاسخ
bool MainWindow::winEvent(MSG *message, long *result)
{
    if(message->message == WM_GETMINMAXINFO){
        MINMAXINFO* mmi = (MINMAXINFO*)message->lParam;
        mmi->ptMaxSize.x = 500;
        mmi->ptMaxSize.y = 300;
        result = 0;
        return true;
    }else{
        return false;
    }
}

 

بدیهیه که باید اعلان تابع رو هم در فایل سرآیند ذکر کنی. و اینکلود زیر رو هم انجام بده:

#include <qt_windows.h>

این در نسخه‌های قبل از ۵ کار خواهد کرد. در نسخه ۵ تابع nativeEvent جایگزین winEventو x11Event و macEvent شده است.

پاسخ داده شده بهمن 16, 1392 بوسیله ی حامد مصافى (امتیاز 1,104)   2 3 12
انتخاب شد بهمن 16, 1392 بوسیله ی BlueBlade
سلام .  من از ویندوز استفاده نمی کنم.
خب بفرمایید از چه سیستم‌عاملی استفاده می‌کنید. خودمون که نباید حدس بزنیم.
در محیط kde که من استفاده می‌کنم روال همونطوریه که خودتون انتظار دارید.
mac os  و ubunto
+2 امتیاز

اولا maximum size رو بردار بزار حالت default بمونه اون جوری اون باتون فعال میمونه

دوما شما resize event رو به این شکل overload کن :

void window::resizeEvent(QResizeEvent *event)
{
    if(event->size().width()>500 && event->size().height()>300)
        resize(QSize(500,300));
    else if(event->size().width()>500||event->size().height()>300)
        resize(event->oldSize());
}

تو این روش موقع ریسایز کردن برنامه تیک میگیره به خاطر اینه که اول پنجره ریسایز میشه بعد این event صدا زده میشه من هنوز راهی رو پیدا نکردم که بهتر باشه .

یک نکته دیگه هم هست اگر الان اون 2 تا عدد 500 و300 رو جوری بدی که ممکن نباشه برنامه هنگ می کنه پس باید یکم دقت کنی .( مثلا اگر minimum height یکی از اعضا از 300 بیشتر باشه )

پاسخ داده شده بهمن 16, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده بهمن 16, 1392 بوسیله ی BlueBlade
خوبه ولی اون تیکی که داره خیلی اذیت میکنه :( ... راه بهتری نیست ؟
...