QWidget *scrollWidget = new QWidget;
ui->scrollArea->setWidget(scrollWidget);
QGridLayout *layout = new QGridLayout (scrollWidget);
scrollWidget->setLayout(layout);
for (int i = 0; i < offset; i++) {
// 创建Plotted对象
Plotted *tted = new Plotted;
tted->setFixedSize(400, 300);
// 设置Plotted对象的位置和大小
layout->addWidget(tted, i / 3,i % 3);
}
ui->scrollArea->setWidgetResizable(true);
这串代码把子控件固定大小后,出现在滑动窗口的中心位置,不固定大小就会出现被压缩的情况怎么办
把tted->setFixedSize(400, 300);改为 tted->setMinimumSize(QSize(400, 300));后子控件会添加在滑动窗口的0行0列位置上
在你的代码中,子控件(Plotted对象)的位置和大小是由QGridLayout来管理的。如果你希望子控件固定在QScrollArea的第0行和第0列的位置上,你可以通过以下方式实现:
cpp
Copy code
QWidget *scrollWidget = new QWidget;
ui->scrollArea->setWidget(scrollWidget);
QGridLayout *layout = new QGridLayout(scrollWidget);
scrollWidget->setLayout(layout);
for (int i = 0; i < offset; i++) {
// 创建Plotted对象
Plotted *tted = new Plotted;
tted->setFixedSize(400, 300);
// 设置Plotted对象的位置和大小
layout->addWidget(tted, i / 3, i % 3);
// 如果你希望子控件固定在第0行和第0列,可以这样设置:
if (i == 0) {
layout->setRowStretch(0, 0);
layout->setColumnStretch(0, 0);
}
}
ui->scrollArea->setWidgetResizable(true);
在这个代码片段中,我们在第一个Plotted对象被添加到布局中时,通过layout->setRowStretch(0, 0)和layout->setColumnStretch(0, 0)来禁用第0行和第0列的拉伸,这样子控件就会固定在这个位置上,不会被压缩或居中。其他行和列仍然会根据QGridLayout的规则进行拉伸
你说的方法为解决,一旦把子控件大小固定后还是会在滑动窗口的中心位置出现。