防止在 QStatusBar 调整大小期间窗口大小调整

3
如果应用程序的主窗口有一个QStatusBar,并且其宽度变得比主窗口的宽度更大(例如在添加小部件时),则窗口会自动调整大小以适应状态栏。我想知道是否有办法防止在这种情况下窗口的大小改变?
谢谢!
3个回答

3
我已经找到了解决这种情况的方法。我在我的状态栏中添加了一个 QScrollArea,现在我将我的部件添加到该滚动区域中,这样它们就不会影响主窗口的大小。

0
为了实现这个,我会写一个小的RAII调整大小阻塞器,就像这样:
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 这里


@nabroyan 它为什么不起作用?是编译器错误还是窗口仍在调整大小?你能展示一下你尝试过的内容吗? - PeterSW
它已经编译并运行,但窗口仍然调整大小。我刚刚复制粘贴了你的代码并传递了我的主窗口指针。 - nabroyan
你是否在包含触发调整大小的调用的范围内使用它? 在我的示例中,它仅在addToStatusBar()函数中阻止调整大小,以便用户仍然可以调整窗口大小。 - PeterSW
是的,在调用 addWidget() 函数之前,我创建了一个 ResizeBlocker 类对象。 - nabroyan
事实证明,它可以调整大小,但当小部件被移除并且用户尝试调整窗口大小时,它会返回到原始大小。 - nabroyan
让我们在聊天室里继续这个讨论 - PeterSW

0

我曾经遇到过同样的问题,通过为我添加到状态栏的小部件设置固定大小,我成功地解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接