2012-01-13 157 views
1

所以非QMdiArea版本的我的代碼,如何使QMdiArea子窗口小部件不可調整大小?

MyWidget::MyWidget(QWidget* parent) 
{ 
    ... 
    layout()->setSizeConstraint(QLayout::SetFixedSize); 
} 

MainWindow::MainWindow(...) 
{ 
    ... 
    MyWidget* wgt = new MyWidget(NULL); 
    wgt->show(); 
} 

作品就好了,並且產生用戶不能調整大小的Widget。但是,當MainWindow代碼替換

MainWindow::MainWindow(...) 
{ 
    ... 
    MyWidget* wgt = new MyWidget(ui->mdiArea); //Or MyWidget(NULL), same result 
    ui->mdiArea->addSubWindow(wgt); 
} 

窗口,現在QMdiArea內,是調​​整大小。它似乎不是Qt :: WindowFlags的問題,它們不處理調整策略。當然有辦法做到這一點? NB我不能使用像setFixedSize(ht, wd)這樣的東西,因爲小部件的大小可以通過編程來改變(小部件被添加和刪除)。但用戶不應該能夠調整它的大小。

回答

0

以下爲我工作:

MyWidget* wgt = new MyWidget(ui->mdiArea); 
    QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt); 
    subWindow->setFixedSize(wgt->size()); 
    wgt->show(); 
+0

好吧,我想要使​​用'setFixedSize'(參見原文),但是我猜想,每次添加或刪除小部件時都會重新調用它,這是唯一的出路。 – 2012-02-11 18:17:46

1

即使MyWidget不改變大小,當你調用:

ui->mdiArea->addSubWindow(wgt); 

物件被放在一個QMdiSubWindow其中調整大小。所有你需要做的就是獲得創建的窗口並修復其大小:

QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt); 
subWindow->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 

這應該可以,但我自己並沒有試過這段代碼。

編輯:好吧......很明顯,不會修復大小。 :(

+0

不,沒有任何改變肯定似乎是一個很好的嘗試,但還是那句話,因爲'setSizePolicy'已經QWidget'而不是'方法。特別是對'QMdiSubWindow'。但是,upvote指出'addSubWindow'返回'QMdiSubWindow *',我沒有意識到這一點。:) – 2012-01-14 20:24:33

+0

該死的。你可以檢查一下'sizeHint()'方法爲你的小部件和子窗口返回什麼?特別是如果返回的'QSize'是有效的。 http://developer.qt.nokia.com/doc/qt-4.8/qsize.html#isV​​alid 如果有任何內容無效,這可能可以解釋爲什麼修復尺寸策略不起作用... – 2012-01-14 21:33:37