QScrollArea中QBoxLayout中的固定大小小部件
Fixed size widget in QBoxLayout in QScrollArea
我正在开发一个在嵌入式系统上全屏运行的Qt应用程序(BeagleBone Black,带4d 4.3''触摸屏)。我想显示不同数量的固定宽度自定义小部件(例如,这些是简单的滑块)。所以我的想法是有一个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);
}
结果显示一个没有任何滚动条和重叠滑块的方形框。
我试着添加:
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);
}
相关文章:
- 如何将部分流作为参数传递
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- 如何删除部分类?
- 如何只链接到柯南包中的部分库?
- 无法打印用户填充的部分数组的反面
- 使用类型特征的部分类专用化
- 将 CRTP 与部分类专用化结合使用?
- 为什么 C++17 标准没有带来部分类模板参数扣除?
- C++17 中的部分类模板参数推导
- QBoxLayout spacing
- 是否可以保证输入<Type>实数时复杂对象的虚部设置为零?
- 针对多种类型的部分类模板专用化
- 通用功能模板返回一个大小的容器比输入容器的大小小
- MPI - 当数组初始化值必须为常量时,如何为工作线程创建部分数组
- 如何在部分类模板专业化中实现继承
- C 文字中的分界符部和单位
- 特征矩阵右部等效
- 如何在 Eigen3 库中高效提取复矩阵的实部/虚部?
- 参数包不在最后位置的部分类模板专用化
- QScrollArea中QBoxLayout中的固定大小小部件