QWidget的大小有限。我该怎么改变它?

时间:2015-03-13 07:42:18

标签: c++ qt qt5 qt5.2

application

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

如何将QWidget对象的大小扩展到1200 * 800并删除滚动条?如何在垂直和水平方向上将对象放在应用程序的中心?

2 个答案:

答案 0 :(得分: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. 为toplevel小部件添加一个布局,以便它适当地调整滚动区域的大小:

    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);
      }
    };
    
  3. 在这两种情况下,声明的顺序与销毁顺序相反,因为必须确保在滚动区域之前销毁MyContentsWidget,所以它很重要。

答案 1 :(得分:0)

将您的小部件添加到QLayout:

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