2012-01-13 164 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