【问题标题】:The size of a QWidget is limited. How can I change it?QWidget 的大小是有限的。我怎样才能改变它?
【发布时间】:2015-05-15 15:09:12
【问题描述】:

我想用 Visual Studio 2013 在 C++ 中构建一个 Qt5.2 应用程序。我应用 QWidget::resize 函数将上图中的 QWidget 对象的大小设置为 1200*800。但是好像QWidget对象不可能那么大(有垂直和水平滚动条)。

如何将 QWidget 对象的大小扩大到 1200*800 并移除滚动条?以及如何使对象在垂直和水平方向都位于应用程序的中心?

【问题讨论】:

    标签: c++ qt qt5 qt5.2


    【解决方案1】:

    您需要提供一个最小示例来说明正在发生的事情。我们不必猜测。

    我最多只能看到三个小部件:最顶层的QScrollArea,以及滚动区域内的任何小部件。如果是这种情况,那么滚动区域不是由布局管理的,并且当您调整顶级小部件的大小时,滚动区域的大小保持不变。

    我看到了两种解决方案,假设 MyContentsWidget 是一个小部件,它可以将你的基因画出来(如果是这样的话)。

    1. 摆脱顶层小部件并使用QScrollArea作为顶层小部件:

      int main(int argc, char ** argv) {
        QApplication app(argc, argv);
        QScrollArea area;
        MyContentsWidget contents;
        area.setWidget(&contents);
        area.show();
        return app.exec();
      }
      
    2. 向顶层小部件添加布局,以便适当调整滚动区域的大小:

      class MyWindow : public QWidget {
        QGridLayout m_layout;
        QScrollArea m_area;
        MyContentsWidget m_contents;
      public:
        MyWindow(QWidget * parent = 0) : QWidget(parent), m_layout(this) {
          m_layout.addWidget(&m_area, 0, 0);
          m_area.setWidget(&m_contents);
        }
      };
      

    在这两种情况下,声明的顺序与销毁的顺序相反,这很重要,因为您必须确保MyContentsWidget在滚动区域之前被销毁。

    【讨论】:

      【解决方案2】:

      将您的小部件添加到 QLayout:

      QVBoxLayout *layout = new QVBoxLayout;
      layout->addWidget(widget);
      mainWindow->setLayout(layout);
      

      【讨论】:

        猜你喜欢
        • 2023-02-22
        • 2022-01-21
        • 2021-05-02
        • 2022-01-24
        • 2022-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        相关资源
        最近更新 更多