0

应用

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

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

4

2 回答 2

1

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

我所能看到的最多只有三个小部件:顶级 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在滚动区域之前被销毁。

于 2015-03-13T14:44:36.017 回答
0

将您的小部件添加到 QLayout:

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(widget);
mainWindow->setLayout(layout);
于 2015-03-13T11:10:52.533 回答