【问题标题】:How to make a QMdiArea subwindow widget non-resizeable?如何使 QMdiArea 子窗口小部件不可调整大小?
【发布时间】:2012-01-13 21:27:45
【问题描述】:

所以我的代码的非QMdiArea 版本,

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

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

工作得很好,并产生了一个用户无法调整大小的小部件。但是当MainWindow代码被替换为

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

现在位于QMdiArea 内的窗口可以调整大小。这似乎不是 Qt::WindowFlags 的问题,它们不处理调整大小策略。当然有办法做到这一点?注意我不能使用setFixedSize(ht, wd) 之类的东西,因为小部件的大小可以通过编程方式更改(添加和删除子小部件)。但用户应该无法调整它的大小。

【问题讨论】:

    标签: c++ qt qmdiarea


    【解决方案1】:

    即使MyWidget 不可调整大小,当您调用时:

    ui->mdiArea->addSubWindow(wgt);
    

    小部件被放在一个QMdiSubWindow 中, 可以调整大小。您所要做的就是获取已创建的窗口并修复其大小:

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

    这应该可以,但我自己没有尝试过这段代码。

    编辑:嗯...显然 修复大小。 :(

    【讨论】:

    • 不,没有改变任何东西。绝对看起来是一个很好的尝试,但又一次,因为setSizePolicy 已经是QWidget 的一种方法,而不是QMdiSubWindow 特有的方法。但赞成指出addSubWindow 返回QMdiSubWindow*,我没有意识到这一点。 :)
    • 该死的。你能检查一下sizeHint() 方法为你的小部件和子窗口返回了什么吗?特别是如果返回的QSizes 有效。 developer.qt.nokia.com/doc/qt-4.8/qsize.html#isValid 如果有任何无效,它可能会解释为什么修复大小策略不起作用...
    【解决方案2】:

    以下内容对我有用:

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

    【讨论】:

    • 好吧,我不想使用setFixedSize(请参阅原始帖子),但我猜这是唯一的方法,每次添加或删除小部件时重新调用它。
    猜你喜欢
    • 2021-08-29
    • 2015-05-08
    • 2023-03-24
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2011-07-09
    • 2018-03-01
    相关资源
    最近更新 更多