gpt4 book ai didi

c++ - QScrollArea 中 QBoxLayout 中固定大小的小部件

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:42 24 4
gpt4 key购买 nike

我正在开发一个在嵌入式系统(带有 4d 4.3'' 触摸屏的 BeagleBone Black)上全屏运行的 Qt 应用程序。我想显示不同数量的固定宽度自定义小部件(例如,假设这些是简单的 slider )。所以我的想法是有一个 QScrollArea,我使用 Qt Designer 添加到我的表单中,它占用了我屏幕上的空间。然后,把我想要的QSlider的数量放在一个QHBoxLayout中。最后,在滚动区域显示 QHBoxLayout。这样,如果要求的 QSlider 数量太大而无法显示在屏幕上,我希望出现一个水平滚动条。我还希望 QSlider 具有恒定宽度(我的自定义小部件具有固定宽度)。所以这是我写的代码:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// ui->scrollArea is a QScrollArea generated by Qt Designer
ui->setupUi(this);
QHBoxLayout * layout = new QHBoxLayout(ui->scrollArea);
layout->setSpacing(1);
QSlider * slider1 = new QSlider(layout->widget());
QSlider * slider2 = new QSlider(layout->widget());
QSlider * slider3 = new QSlider(layout->widget());
QSlider * slider4 = new QSlider(layout->widget());
slider1->setFixedSize(200, 200);
slider2->setFixedSize(200, 200);
slider3->setFixedSize(200, 200);
slider4->setFixedSize(200, 200);
layout->addWidget(slider1);
layout->addWidget(slider2);
layout->addWidget(slider3);
layout->addWidget(slider4);
ui->scrollArea->setLayout(layout);
}

结果给出了一个没有任何滚动条和重叠 slider 的方框。

我尝试添加:

slider1->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
slider2->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
slider3->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
slider4->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));

但结果相同。

那么在固定大小的滚动区域中显示固定大小的内容的正确方法是什么?

最佳答案

好的,我在写问题的时候找到了答案,所以其他人似乎也有同样的问题,我把解决方案和一个完整的例子贴出来。
解决方案是在 QScrollArea 之前通过另一个 QWidget,因此它给出以下结构(括号中有父项)[并键入方括号]

ui->scrollArea [QScrollArea]
|\
| widget (ui->scrollArea) [QWidget]
| |\
| | layout (widget) [QHBoxLayout]
| | |\
| | | slider1 (layout->widget()) [QSlider]
| | | slider2 (layout->widget()) [QSlider]
| | | slider3 (layout->widget()) [QSlider]
| | | slider4 (layout->widget()) [QSlider]

由以下代码实现:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QWidget * widget = new QWidget(ui->scrollArea);
QHBoxLayout * layout = new QHBoxLayout(widget);
layout->setSpacing(1);
QSlider * slider1 = new QSlider(layout->widget());
QSlider * slider2 = new QSlider(layout->widget());
QSlider * slider3 = new QSlider(layout->widget());
QSlider * slider4 = new QSlider(layout->widget());
slider1->setFixedSize(200, 200);
slider2->setFixedSize(200, 200);
slider3->setFixedSize(200, 200);
slider4->setFixedSize(200, 200);
slider1->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
slider2->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
slider3->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
slider4->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
layout->addWidget(slider1);
layout->addWidget(slider2);
layout->addWidget(slider3);
layout->addWidget(slider4);
widget->setLayout(layout);
ui->scrollArea->setWidget(widget);
}

关于c++ - QScrollArea 中 QBoxLayout 中固定大小的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com