首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QBoxLayout中的固定大小小部件( QScrollArea )

QBoxLayout中的固定大小小部件( QScrollArea )
EN

Stack Overflow用户
提问于 2014-09-25 14:34:43
回答 1查看 1.4K关注 0票数 1

我正在开发一个在嵌入式系统上运行在全屏上的Qt应用程序(带有4d4.3‘’触摸屏的BeagleBone Black )。我想显示不同数量的固定宽度定制小部件(比方说,这些都是简单的滑块)。所以我的想法是有一个QScrollArea,我使用Qt设计器将它添加到我的表单中,它必须占用屏幕上的空间。然后,将我想要的QSlider编号放在QHBoxLayout中。最后,在滚动区域中显示QHBoxLayout。这样,如果要求的QSlider数量大到要显示在屏幕上,我希望出现一个水平滚动条。我还希望QSlider有一个恒定的宽度(我的自定义小部件有一个固定的宽度)。这就是我写的代码:

代码语言:javascript
复制
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);
}

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

我试着补充:

代码语言:javascript
复制
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));

但结果一样。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-25 14:34:43

好的,我在写问题的时候找到了答案,所以其他人似乎也有同样的问题,所以我用一个完整的例子发布了解决方案。

解决方案是在QWidget之前传递另一个QScrollArea,因此它给出了以下结构(父结构在braket中),并键入了正方形拼图

代码语言:javascript
复制
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] 

它由以下代码实现:

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26041295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档