首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QScrollArea in QGroupBox

QScrollArea in QGroupBox
EN

Stack Overflow用户
提问于 2012-06-06 15:52:37
回答 1查看 2.8K关注 0票数 0

我正在尝试实现以下架构:

  • QGroupBox ->setLayout
    • QVBoxLayout ->addWidget
      • QScrollArea ->setWidget
        • QWidget ->setLayout
          • QVBoxLayout ->addWidgetH 210H 111My

我正在寻找的结果是有一个带有scrollarea的groupbox和我所有的小部件。但是,当我尝试实现这一点时,scrollarea中没有任何东西。

以下是我所拥有的:http://imgur.com/SgQkJ

编辑:当我移除scrollarea并直接将我的小部件放在gorupbox http://imgur.com/iuTnV中时,我就是这样做的。

这是我的密码:

Mesure.h

代码语言:javascript
运行
复制
#ifndef MESURE_H
#define MESURE_H

#include <QWidget>
#include <QHBoxLayout>
#include <QToolButton>
#include <QLabel>
#include <QCheckBox>
#include <QString>

class Mesure : public QWidget
{
    public:
    Mesure(QString angle, QWidget *parent);

    private:
    QHBoxLayout *m_hlayoutMesure;
    QToolButton *m_buttonClose;
    QLabel *m_labelAngle;
    QCheckBox *m_checkboxMesure;
};

#endif

Mesure.cpp

代码语言:javascript
运行
复制
#include "Mesure.h"

Mesure::Mesure(QString angle, QWidget *parent) :
    QWidget(parent),
    m_hlayoutMesure(new QHBoxLayout(this)),
    m_buttonClose(new QToolButton(this)),
    m_labelAngle(new QLabel(angle, this)),
    m_checkboxMesure(new QCheckBox(this))
{
    m_buttonClose->setText("X");
    m_labelAngle->setAlignment(Qt::AlignCenter);

    m_hlayoutMesure->addStretch(1);
    m_hlayoutMesure->addWidget(m_checkboxMesure);
    m_hlayoutMesure->addWidget(m_labelAngle);
    m_hlayoutMesure->addWidget(m_buttonClose);
    m_hlayoutMesure->addStretch(1);
    m_hlayoutMesure->setSpacing(10);
    m_hlayoutMesure->setMargin(0);

    QObject::connect(m_buttonClose, SIGNAL(clicked()), this, SLOT(close()));
}

PanneauMesure.h

代码语言:javascript
运行
复制
#ifndef PANNEAUMESURE_H
#define PANNEAUMESURE_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QToolButton>
#include <QLabel>
#include <QCheckBox>
#include <QString>
#include <QPushButton>
#include <QSlider>
#include <QSpacerItem>
#include <QGroupBox>
#include <QScrollArea>
#include <vector>
#include "Mesure.h"

class PanneauMesure : public QWidget
{
    Q_OBJECT

    public:
    PanneauMesure();
    void add(Mesure *mesure);

    public slots:
    void remiseAZero();

    private:
    QVBoxLayout *m_vlayoutTotal;
    QGroupBox *m_groupboxMesures;
    QVBoxLayout *m_vlayoutGroupBoxMesures;
    QScrollArea *m_scrollareaMesures;
    QWidget *m_widgetMesures;
    QVBoxLayout *m_vlayoutMesures;
    QGroupBox *m_groupboxOptions;
    QVBoxLayout *m_vlayoutOptions;
    QCheckBox *m_checkboxAfficherMesures;
    QPushButton *m_buttonRAZ;
    QWidget *m_widgetAlpha;
    QHBoxLayout *m_hlayoutAlpha;
    QLabel *m_labelAlphaText;
    QLabel *m_labelAlphaValeur;
    QSlider *m_sliderAlpha;
};

#endif

PanneauMesure.cpp

代码语言:javascript
运行
复制
#include "PanneauMesure.h"

PanneauMesure::PanneauMesure() :
    QWidget(),
    m_vlayoutTotal(new QVBoxLayout(this)),
    m_groupboxMesures(new QGroupBox("Mesures", this)),
    m_vlayoutGroupBoxMesures(new QVBoxLayout(m_groupboxMesures)),
    m_scrollareaMesures(new QScrollArea(m_groupboxMesures)),
    m_widgetMesures(new QWidget(m_groupboxMesures)),
    m_vlayoutMesures(new QVBoxLayout(m_widgetMesures)),
    m_groupboxOptions(new QGroupBox("Options", this)),
    m_vlayoutOptions(new QVBoxLayout(m_groupboxOptions)),
    m_checkboxAfficherMesures(new QCheckBox("Afficher les mesures", m_groupboxOptions)),
    m_buttonRAZ(new QPushButton("Remise à zéro", m_groupboxOptions)),
    m_widgetAlpha(new QWidget(m_groupboxOptions)),
    m_hlayoutAlpha(new QHBoxLayout(m_widgetAlpha)),
    m_labelAlphaText(new QLabel("Alpha :", m_groupboxOptions)),
    m_labelAlphaValeur(new QLabel("50", m_groupboxOptions)),
    m_sliderAlpha(new QSlider(m_groupboxOptions))
{
    // Alpha
    m_sliderAlpha->setMaximum(100);
    m_sliderAlpha->setValue(50);
    m_hlayoutAlpha->addWidget(m_labelAlphaText);
    m_hlayoutAlpha->addWidget(m_labelAlphaValeur);
    m_labelAlphaText->setAlignment(Qt::AlignRight);
    m_labelAlphaValeur->setAlignment(Qt::AlignLeft);
    m_sliderAlpha->setOrientation(Qt::Horizontal);
    QObject::connect(m_sliderAlpha, SIGNAL(valueChanged(int)), m_labelAlphaValeur, SLOT(setNum(int)));

    // Afficher Mesures
    m_checkboxAfficherMesures->setChecked(true);

    // Options
    m_vlayoutOptions->addWidget(m_buttonRAZ);
    m_vlayoutOptions->addWidget(m_checkboxAfficherMesures);
    m_vlayoutOptions->addWidget(m_widgetAlpha);
    m_vlayoutOptions->addWidget(m_sliderAlpha);

    // Mesures
    m_scrollareaMesures->setWidget(m_widgetMesures);
    m_vlayoutGroupBoxMesures->addWidget(m_scrollareaMesures);

    // Total
    m_vlayoutTotal->addWidget(m_groupboxOptions);
    m_vlayoutTotal->addWidget(m_groupboxMesures);

    setLayout(m_vlayoutTotal);
}

void PanneauMesure::add(Mesure *mesure)
{
    m_vlayoutMesures->addWidget(mesure);
    QObject::connect(m_buttonRAZ, SIGNAL(clicked()), mesure, SLOT(close()));
    QObject::connect(m_buttonRAZ, SIGNAL(clicked()), this, SLOT(remiseAZero()));
}

void PanneauMesure::remiseAZero()
{
    m_sliderAlpha->setValue(50);
    m_checkboxAfficherMesures->setChecked(true);
}

Main.cpp

代码语言:javascript
运行
复制
#include <QApplication>
#include "PanneauMesure.h"
#include "Mesure.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    PanneauMesure panneau;
    Mesure mesure1("14°", &panneau);
    Mesure mesure2("12°", &panneau);
    Mesure mesure3("9°", &panneau);
    Mesure mesure4("8°", &panneau);
    Mesure mesure5("7°", &panneau);
    Mesure mesure6("5°", &panneau);
    Mesure mesure7("2°", &panneau);
    Mesure mesure8("1°", &panneau);

    panneau.add(&mesure1);
    panneau.add(&mesure2);
    panneau.add(&mesure3);
    panneau.add(&mesure4);
    panneau.add(&mesure5);
    panneau.add(&mesure6);
    panneau.add(&mesure7);
    panneau.add(&mesure8);

    panneau.show();

    return app.exec();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-06 17:59:46

默认情况下,QScrollArea视图(内部滚动部分)不会在其内容更改时调整其大小,您可以使用以下两种方法来更改:

代码语言:javascript
运行
复制
m_vlayoutMesures->setSizeConstraint(QLayout::SetMinAndMaxSize);

代码语言:javascript
运行
复制
m_scrollareaMesures->setWidgetResizable(true);

后者还将调整QScrollArea的外部大小,以尽可能避免滚动条。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10917727

复制
相关文章

相似问题

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