【问题标题】:Prevent window resize during QStatusBar resize在 QStatusBar 调整大小期间防止窗口调整大小
【发布时间】:2014-03-08 18:10:20
【问题描述】:

如果应用程序的主窗口有QStatusBar,并且如果它的宽度变得比主窗口的宽度大(例如在添加小部件期间),窗口会自动调整大小以适应状态栏。我想知道在这种情况下有没有办法防止窗口大小发生变化?

提前致谢!

【问题讨论】:

    标签: c++ qt resize qstatusbar


    【解决方案1】:

    我找到了摆脱这种情况的方法。我在状态栏中添加了QScrollArea,现在我将小部件添加到该滚动区域,因此它们不会影响主窗口的大小。

    【讨论】:

      【解决方案2】:

      为此,我会写一个像这样的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。

      【讨论】:

      • @nabroyan 以什么方式不起作用?编译器错误,还是窗口仍在调整大小?您能展示一下您的尝试吗?
      • 它编译并运行,但窗口仍然调整大小。我刚刚复制粘贴了您的代码并传递了我的主窗口的指针。
      • 您是否在包含触发调整大小的调用的范围内使用它?在我的示例中,它仅在 addToStatusBar() 函数中阻止调整大小,以便用户仍然可以调整窗口大小。
      • 是的,我在addWidget()函数调用之前创建了一个ResizeBlocker类对象
      • 好吧,事实证明,它会调整大小,但是当小部件被移除并且当用户尝试调整窗口大小时,它会恢复到原来的大小。
      【解决方案3】:

      我遇到了同样的问题,只需为我添加到状态栏的小部件设置固定大小即可解决它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        相关资源
        最近更新 更多