如何在Qt Designer中使标签适合滚动窗口区域?

时间:2018-12-19 20:31:53

标签: qt qt-designer

我想在标签中显示很多图标,但是由于图标的数量确实很高,我将需要能够在该标签中水平和垂直滚动。

我做了什么:我创建了一个ScrollArea,它具有水平和垂直滚动条以及一个标签。但是,它似乎不起作用。我在标签中写了一个很长的句子,但是滚动条不能移动标签中的内容。实际上,我认为滚动条仅与滚动区域相关,而与标签无关。

总结:我需要在窗体上放置一个固定大小的标签,以便能够水平和垂直滚动

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

这将帮助您一次滚动显示很多图片,并通过其尺寸来稳定。

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
class QLabel;
class QScrollArea;
class FlowLayout;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void setImagePaths(const QStringList& paths);
private:
    QScrollArea* m_area;
    QVector <QLabel*> m_imagesLab;
    FlowLayout *flowLayout;

};

#endif // MAINWINDOW_H

.cpp文件

#include "mainwindow.h"
#include "flowlayout.h"

#include <QScrollArea>
#include <QLabel>
#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    m_area = new QScrollArea(this);
    m_area->setWidgetResizable(true);

    flowLayout = new FlowLayout;

    QWidget* widget = new QWidget(this);
    widget->setLayout(flowLayout);

    m_area->setWidget(widget);
    setCentralWidget(m_area);

}

void MainWindow::setImagePaths(const QStringList &paths)
{
    foreach (QString path, paths) {
        QLabel* lab = new QLabel(this);
        lab->setPixmap(path);
        flowLayout->addWidget(lab);
        m_imagesLab.push_back(lab);
    }
}
MainWindow::~MainWindow()
{

}
您可以在QT示例中找到

flowlayout.hflowlayout.cpp

  

Flow Layout   示例显示了如何为不同的窗口排列小部件   大小。

     

Flow Layout实现了可处理不同窗口大小的布局。   窗口小部件的位置根据应用程序的宽度而变化   窗口。