QWidget scrollWidget = new QWidget; ui->scrollArea->setWidget(scrollWidget); QGridLayout layout = new QGridLayout; scrollWidget->setLayout(layout); layout->setGeometry(QRect(0, 0, ui->scrollArea->viewport()->width(), ui->scrollArea->viewport()->height()));
/*使用一个循环来创建多个Plotted对象。
在每次循环中,创建一个新的Plotted对象tted,
设置Plotted对象的位置和大小,并将其添加到布局中。/ for (int i = 0; i < offset; i++) { if (Type == 1) { Plotted tted = new Plotted; tted->setMinimumSize(QSize(400, 300)); layout->addWidget(tted, i / 3, i % 3); } else if (Type == 2) { Quote *quote = new Quote; quote->setMinimumSize(QSize(400, 300));
```rust // 创建一个新的布局,并将子控件添加到该布局中 QHBoxLayout *quoteLayout = new QHBoxLayout; quoteLayout->addWidget(quote);
// 将新的布局添加到主布局中 layout->addLayout(quoteLayout, i / 3, i % 3);
} ```
} ui->scrollArea->setWidgetResizable(true);这串代码在QTQScrollArea滑动窗口中动态添加两个不同的子控件时,第一个添加的子控件会变成第二个添加的子控件。应该怎么解决???
在你的代码中,创建多个不同类型的子控件时,第一个添加的子控件会变成第二个添加的子控件。这可能是因为你在循环中使用相同的布局 QGridLayout,并且在某些情况下可能是因为子控件的布局管理不当,导致布局重叠或被覆盖。
QGridLayout
这里有一个改进的版本,确保每个子控件在添加到 QGridLayout 时不会覆盖其他控件。
QWidget *scrollWidget = new QWidget; ui->scrollArea->setWidget(scrollWidget); QGridLayout *layout = new QGridLayout; scrollWidget->setLayout(layout); // 使用一个循环来创建多个Plotted和Quote对象。 for (int i = 0; i < offset; i++) { if (Type == 1) { Plotted *tted = new Plotted; tted->setMinimumSize(QSize(400, 300)); layout->addWidget(tted, i / 3, i % 3); } else if (Type == 2) { Quote *quote = new Quote; quote->setMinimumSize(QSize(400, 300)); // 直接将Quote对象添加到布局中 layout->addWidget(quote, i / 3, i % 3); } } ui->scrollArea->setWidgetResizable(true);
Plotted
Quote
使用 QGridLayout::addWidget 将子控件添加到 QGridLayout 中,确保每个控件添加到不同的网格位置。
QGridLayout::addWidget
子控件的最小大小:
通过 setMinimumSize 设置每个子控件的最小大小,确保它们在网格中占据适当的空间。
setMinimumSize
子布局管理:
在原代码中,将 Quote 放入 QHBoxLayout 并添加到 QGridLayout 可能导致布局混乱。改进后的代码直接将 Quote 添加到 QGridLayout,避免了多层布局可能引发的问题。
QHBoxLayout
确保网格布局的正确性:
i / 3
i % 3
检查控件的布局属性,确保每个控件都在预期的位置。
调整布局参数:
通过以上调整,可以确保不同类型的子控件不会互相覆盖,并且在 QScrollArea 中动态添加多个控件时,布局显示正确。
QScrollArea