代码之家  ›  专栏  ›  技术社区  ›  MysteryGuy

如何在qt设计器中将标签调整到滚动窗口区域?

  •  0
  • MysteryGuy  · 技术社区  · 6 年前

    我想在一个标签中显示很多图标,但由于图标的数量非常高,我需要能够在这个标签中水平和垂直滚动。

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

    总结一下:我需要一个固定大小的标签在我的表单上,我将能够水平和垂直滚动。

    enter image description here enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   Vahagn Avagyan    6 年前

    它将帮助你把许多图片放在一个滚动,并将稳定其大小。

    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()
    {
    
    }
    

    flowlayout.h flowlayout.cpp 您可以在QT示例中找到,

    Flow Layout 示例显示如何为不同窗口排列小部件 尺寸。

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