【发布时间】:2015-05-15 15:09:12
【问题描述】:
我想用 Visual Studio 2013 在 C++ 中构建一个 Qt5.2 应用程序。我应用 QWidget::resize 函数将上图中的 QWidget 对象的大小设置为 1200*800。但是好像QWidget对象不可能那么大(有垂直和水平滚动条)。
如何将 QWidget 对象的大小扩大到 1200*800 并移除滚动条?以及如何使对象在垂直和水平方向都位于应用程序的中心?
【问题讨论】:
我想用 Visual Studio 2013 在 C++ 中构建一个 Qt5.2 应用程序。我应用 QWidget::resize 函数将上图中的 QWidget 对象的大小设置为 1200*800。但是好像QWidget对象不可能那么大(有垂直和水平滚动条)。
如何将 QWidget 对象的大小扩大到 1200*800 并移除滚动条?以及如何使对象在垂直和水平方向都位于应用程序的中心?
【问题讨论】:
您需要提供一个最小示例来说明正在发生的事情。我们不必猜测。
我最多只能看到三个小部件:最顶层的QScrollArea,以及滚动区域内的任何小部件。如果是这种情况,那么滚动区域不是由布局管理的,并且当您调整顶级小部件的大小时,滚动区域的大小保持不变。
我看到了两种解决方案,假设 MyContentsWidget 是一个小部件,它可以将你的基因画出来(如果是这样的话)。
摆脱顶层小部件并使用QScrollArea作为顶层小部件:
int main(int argc, char ** argv) {
QApplication app(argc, argv);
QScrollArea area;
MyContentsWidget contents;
area.setWidget(&contents);
area.show();
return app.exec();
}
向顶层小部件添加布局,以便适当调整滚动区域的大小:
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在滚动区域之前被销毁。
【讨论】:
将您的小部件添加到 QLayout:
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(widget);
mainWindow->setLayout(layout);
【讨论】: