首页 新闻 会员 周边

QT子控件固定在QScrollArea的0行0列的位置上

0
悬赏园豆:10 [已解决问题] 解决于 2023-10-30 16:25

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);

这串代码把子控件固定大小后,出现在滑动窗口的中心位置,不固定大小就会出现被压缩的情况怎么办

咖啡没方糖的主页 咖啡没方糖 | 初学一级 | 园豆:177
提问于:2023-10-24 19:09
< >
分享
最佳答案
0

把tted->setFixedSize(400, 300);改为 tted->setMinimumSize(QSize(400, 300));后子控件会添加在滑动窗口的0行0列位置上

咖啡没方糖 | 初学一级 |园豆:177 | 2023-10-25 18:44
其他回答(1)
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的规则进行拉伸

收获园豆:10
Technologyforgood | 园豆:5992 (大侠五级) | 2023-10-24 20:56

你说的方法为解决,一旦把子控件大小固定后还是会在滑动窗口的中心位置出现。

支持(0) 反对(0) 咖啡没方糖 | 园豆:177 (初学一级) | 2023-10-25 18:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册