【发布时间】:2023-03-09 17:08:01
【问题描述】:
我想要一个视图,向用户展示各种 QLabel、.jpg 图像和项目列表(例如 QListView)。我希望它们都可以一起垂直滚动。用于填充各种小部件的数据将由显示此视图的函数设置。我更喜欢在代码中实现它,而不使用 GUI 设计器。
我考虑过创建继承自 QWidget 的自定义小部件,但我发现很难实现它。这是最好的方法吗?
您能否举例说明我应该如何进行?
提前致谢
【问题讨论】:
我想要一个视图,向用户展示各种 QLabel、.jpg 图像和项目列表(例如 QListView)。我希望它们都可以一起垂直滚动。用于填充各种小部件的数据将由显示此视图的函数设置。我更喜欢在代码中实现它,而不使用 GUI 设计器。
我考虑过创建继承自 QWidget 的自定义小部件,但我发现很难实现它。这是最好的方法吗?
您能否举例说明我应该如何进行?
提前致谢
【问题讨论】:
//Using QScrollArea
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QLabel>
#include <QScrollArea>
#include <QVBoxLayout>
class MyWidget: public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
private:
QScrollArea *scrollArea;
QWidget *widget;
QLabel *label1;
QLabel *label2;
QLabel *label3;
QVBoxLayout *vLayout;
};
#endif // MYWIDGET_H
#include "mywidget.h"
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent)
{
scrollArea=new QScrollArea(this);
widget=new QWidget;
label1=new QLabel("Label1");
label2=new QLabel("Label2");
label3=new QLabel("Label3");
label1->setFixedSize(200,100);
label2->setFixedSize(200,100);
label3->setFixedSize(200,100);
vLayout=new QVBoxLayout;
vLayout->addWidget(label1);
vLayout->addWidget(label2);
vLayout->addWidget(label3);
widget->setLayout(vLayout);
scrollArea->setWidget(widget);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollArea->resize(200,150);
}
【讨论】:
for (widget in widgets) { layout->add(widget); } outerWidget->setLayout(layout); scrollArea->setWidget(outerWidget); outerLayout->add(scrollArea); dialog->setLayout(outerLayout);