【发布时间】:2014-03-08 18:10:20
【问题描述】:
如果应用程序的主窗口有QStatusBar,并且如果它的宽度变得比主窗口的宽度大(例如在添加小部件期间),窗口会自动调整大小以适应状态栏。我想知道在这种情况下有没有办法防止窗口大小发生变化?
提前致谢!
【问题讨论】:
标签: c++ qt resize qstatusbar
如果应用程序的主窗口有QStatusBar,并且如果它的宽度变得比主窗口的宽度大(例如在添加小部件期间),窗口会自动调整大小以适应状态栏。我想知道在这种情况下有没有办法防止窗口大小发生变化?
提前致谢!
【问题讨论】:
标签: c++ qt resize qstatusbar
我找到了摆脱这种情况的方法。我在状态栏中添加了QScrollArea,现在我将小部件添加到该滚动区域,因此它们不会影响主窗口的大小。
【讨论】:
为此,我会写一个像这样的RAII resize blocker:
class ResizeBlocker
{
public:
ResizeBlocker(QWidget *widget)
: m_widget(widget)
{
m_widget->setFixedSize(m_widget->size());
}
~ResizeBlocker()
{
m_widget->setFixedSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
}
private:
QWidget *m_widget;
};
可以这样使用:
void MainWindow::addToStatusBar()
{
ResizeBlocker doNotResizeHere(this);
ui->statusBar->addWidget(new QLabel("A Label"));
}
我为此创建了一个演示并将其上传到 GitHub here。
【讨论】:
addWidget()函数调用之前创建了一个ResizeBlocker类对象
我遇到了同样的问题,只需为我添加到状态栏的小部件设置固定大小即可解决它
【讨论】: