我正在开发一个在嵌入式系统上全屏运行的Qt应用程序(带有4d 4.3英寸触摸屏的BeagleBone Black)。我想显示不同数量的固定宽度自定义小部件(例如,这些是简单的滑块)。所以我的想法是有一个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));
但结果相同。
那么在固定大小的滚动区域中显示固定大小内容的正确方法是什么?
答案 0 :(得分:1)
好吧,我在写这个问题的过程中找到了回答,所以其他人似乎也遇到了同样的问题,我用一个完整的例子发布了解决方案。
解决方案是在QScrollArea之前传递另一个QWidget,因此它给出了以下结构(在brakets中使用parent)[并键入方形bralas]
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);
}