我想用 Visual Studio 2013 在 C++ 中构建一个 Qt5.2 应用程序。我应用该QWidget::resize
函数将上图中的 QWidget 对象的大小设置为 1200*800。但似乎 QWidget 对象不可能那么大(有垂直和水平滚动条)。
如何将 QWidget 对象的大小扩展到 1200*800 并移除滚动条?以及如何使对象在垂直和水平方向都位于应用程序的中心?
您需要提供一个最小的例子来说明正在发生的事情。我们不应该猜测。
我所能看到的最多只有三个小部件:顶级 1、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);