چرا با کم کردن Maximum Size در QMainWindow پنجره به صورت خودکار resize نمیشه ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چرا با کم کردن Maximum Size در QMainWindow پنجره به صورت خودکار resize نمیشه ؟

0 امتیاز

سلام من توی MainWindow برنامم یک check box دارم + یک ویدجت که این 2 تا داخل یک vertical layout قرار دارن .

می خوام وقتی که روی check box کلیک شد ویدجت مخفی بشه یا از حالت مخفی بودن در بیاد تا اینجا رو مشکلی نداشتم .

مشکل اینه که من بعد از مخفی کردن  میام maximum size پنجره رو کم می کنم ولی سایز پنجره بصورت real time عوض نمیشه باید حتما با موس پنجره رو یکم جا به جا کنم تا ریسایزبشه  !!. البته زمانی که ویدجت رو از حالت hidden در میارم درسته.

از تابع resize هم استفاده کردم کار نمی کنه !

چکار کنم ؟!

void MainWindow::checkBoxClicked(bool state)
{
    if(!state)
    {
        widget->setVisible(state);
        this->setMaximumSize(450,200);
        this->resize(450,200);
    }
    else
    {
        this->setMaximumSize(450,400);
        widget->setVisible(state);
        this->resize(450,400);
    }
}

ورژن Qt : 5.2

سوال شده بهمن 18, 1392  بوسیله ی سعید (امتیاز 92)   5 16 22
دوباره تگ گذاری شد بهمن 18, 1392 بوسیله ی BlueBlade

2 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام اگر به هر دلیلی اون کار نمی کنه :

اول یک slot اضافه کن به این شکل

void MainWindow::resizeWindow()
{
    this->setMaximumSize(450,200);

}

بعد حالا کدت رو عوض کن این شکلی بزار :

void MainWindow::checkBoxClicked(bool state)
{
    if(!state)
    {
         widget->setVisible(state);
         QTimer::singleShot(25,this,SLOT(resizeWindow()));
    }
    else
    {
        this->setMaximumSize(450,400);
        widget->setVisible(state);
        this->resize(450,400);
    }
}

 

فکر کنم مشکل به خاطر این باشه که یک وقفه میفته بین Hidden کردن تا زمانی که window میفهمه که ویدجت داخلش  هیدن شده !( البته من چیزی توی document کیوت ندیدم در این باره !)

پاسخ داده شده بهمن 18, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد مرداد 7, 1393 بوسیله ی BlueBlade
+1 امتیاز

سلام اگه سایز window قابل تغییر نباشه این کد به احتمال 99% باید کار کنه

void MainWindow::checkBoxClicked(bool state)
{
    if(!state)
    {
        widget->setVisible(state);
        this->setMaximumSize(450,200);
        this->setMinimumSize(450,200);
    }
    else
    {
        this->setMaximumSize(450,400);
        this->setMinimumSize(450,400);
        widget->setVisible(state);
    }
}

 

پاسخ داده شده بهمن 18, 1392 بوسیله ی amc (امتیاز 280)   3 5 16
ممنون ولی سایز window من متغیره ثابت نیست.
شما تو کدی که خودتون نوشتین ، آخر تابع این کد رو اضافه کنید ، ببینید کار میکنه؟
qApp->processEvents();
موقهی که اون ویدجت هیدن میشه تو application output این ارور رو میده :
setGeometry: Attempt to set a size (450x381) violating the constraints(238x381 - 450x200) on window QWidgetWindow/'windowWindow'.
به نظر میرسه که mainWindow اصلا نمی فهمه که اون هیدن شده !
بجای استفاده از  widget->setVisible(state); از  widget->setHidden(state); استفاده کنید شاید درست بشه
درست نشد  :((
من تست کردم کار میکنه !
برای من که کار نکرد :(
...