2.6 容器控件(一)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 2.6 容器控件(一)

今天及后面几天,小豆君主要来讲一下Qt其它常用控件的用法。主要包括:

  • 容器控件
  • 按钮控件
  • 输入控件
  • 显示控件

显示控件的QOpenGLWidget和QQuickWidget等讲到绘图和QML时,小豆君再进行介绍。

本节先来介绍容器控件。

所谓容器控件,顾名思义,就是在ui中,可以将其他控件拖入到容器控件上。主要的容器控件有:QWidget,QFrame,QScrollArea,QGroupBox,QTabWidget,QToolBox,QStackedWidget,QDockWidget。

QWidget已经讲过,QDockWidget留在讲主窗口(QMainWindow)时再介绍。

2.6.1 QFrame

2.2 QWidget一节中,小豆君讲了如何在帮助文档中查看一个类,首先需要看描述,其次看属性,最后看接口。好,我们按照这个顺序来看一下QFrame。

看完描述,我们知道QFrame其实就是一个带边框的QWidget,既然是边框,那么边框就会有宽度,阴影和形状,从而它就会使得从视觉上有一种突起或凹陷的效果。

再来看QFrame的属性

01ebd755782e4c909dad0843d3544acf.jpeg

属性都很简单,我就不详细介绍了。

其中要注意的是midLineWidth,中间线宽可能有的人不理解。当绘制一个有凸起或凹陷效果的边框时,Qt用里,中,外三条线加上线与线之间的不同明暗颜色来进行特化。如下图,中间的那条线就是midLine。

01ebd755782e4c909dad0843d3544acf.jpeg

QFrame的接口函数都很简单,这里就不介绍了。

2.6.2 QScrollArea

当一个窗口很大时,在显示器上无法显示整个窗口,那么Qt提供了一个叫作滚动窗口类QScrollArea,它提供了一个垂直和水平的滚动条,用以浏览整个窗口。

QScrollArea(滚动区域)继承自QAbstractScrollArea,在Qt中,凡是带有Abstract字样的都是抽象类,但抽象类并不一定全是带有Abstract字样。

滚动区域在它的中心提供了一个视口,而窗口就通过该视口显示,可以通过设置滚动条的显隐策略来控制其显隐。

QAbstractScrollArea的新增属性:

01ebd755782e4c909dad0843d3544acf.jpeg

水平滚动策略,垂直滚动策略

  • Qt::ScrollBarAsNeeded:当视口无法完全显示窗口时,显示滚动条,否则不显示。
  • Qt::ScrollBarAlwaysOff:不显示滚动条。
  • Qt::ScrollBarAlwaysOn:无论如何都显示滚动条。

SizeAdjustPolicy

  • QAbstractScrollArea::AdjustIgnored:视口改变大小,滚动区域并不改变大小
  • QAbstractScrollArea::AdjustToContents:视口改变大小,滚动区域也改变大小
  • QAbstractScrollArea::AdjustToContentsOnFirstShow:在第一次显示时就改变滚动区域的大小

当想要将滚动条定位到某个位置时,可以获取水平或垂直滚动条指针,并调用setValue()接口。

2.6.3 QGroupBox

当我们的多个控件表示同一类操作或显示时,我们希望将这些控件用一个矩形框包起来,QGroupBox就提供了这样的功能。

我们来看一下QGroupBox的属性:

01ebd755782e4c909dad0843d3544acf.jpeg

标题位置 alignment:

  • Qt::AlignLeft:左侧
  • Qt::AlignRight:右侧
  • Qt::AlignHCenter:中间
  • Qt::AlignJustify:选择合适的空间。

是否需要扁平化处理flat:

  • true:只显示标题处的一行直线
  • false:显示整个矩形框。

是否可选checkable,已经被选中:

  • 标题旁有一个勾选框,当被勾选时QGroupBox为可用状态,否则不可用。

标题title

2.6.4 示例

下面小豆君专门写了一个示例帮助大家理解以上三个类

新建一个空的qmake项目ContainerWidget1,pro文件中添加

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ContainerWidget1
TEMPLATE = app

添加一个ContainerFrame界面类

编辑界面,并将控件都加入到布局管理器中

01ebd755782e4c909dad0843d3544acf.jpeg

containerframe.h

#ifndef CONTAINERFRAME_H
#define CONTAINERFRAME_H
#include <QFrame>
namespace Ui {
class ContainerFrame;
}
class ContainerFrame : public QFrame
{
    Q_OBJECT
public:
    explicit ContainerFrame(QWidget *parent = 0);
    ~ContainerFrame();
private slots:
    void on_combo_h_currentIndexChanged(int index);
    void on_combo_v_currentIndexChanged(int index);
    void on_combo_size_currentIndexChanged(int index);
    void on_comboBox_aligment_currentIndexChanged(int index);
    void on_checkBox_flat_toggled(bool checked);
private:
    Ui::ContainerFrame *ui;
};
#endif // CONTAINERFRAME_H

containerframe.cpp

#include <QDebug>
#include <QtMath>
#include <QGroupBox>
#include <QScrollArea>
#include "containerframe.h"
#include "ui_containerframe.h"
ContainerFrame::ContainerFrame(QWidget *parent) :
    QFrame(parent),
    ui(new Ui::ContainerFrame)
{
    ui->setupUi(this);
    /*1  QFrame设置*/
    setFrameShadow(Raised);
    setFrameShape(Box);
    setMidLineWidth(5);
    setLineWidth(2);
    /*2  QScrollArea设置*/
    //创建label,作为滚动区域的中心部件,用视口便可以看到它。
    //设置label最小宽度和高度,以便可以有滚动条出现。
    QLabel* label = new QLabel("滚动\n区域\n需要\n显示\n我");
    label->setMinimumHeight(500);
    label->setMinimumWidth(600);
    ui->scrollArea->setWidget(label);
    //滚动条属性
    QStringList textList;
    textList << "ScrollBarAsNeeded" <<"ScrollBarAlwaysOff" << "ScrollBarAlwaysOn";
    ui->combo_h->addItems(textList);
    ui->combo_v->addItems(textList);
    //SizeAdjustPolicy
    textList.clear();
    textList << "AdjustIgnored" << "AdjustToContentsOnFirstShow" << "AdjustToContents";
    ui->combo_size->addItems(textList);
     /*3  QGroupBox设置*/
    ui->groupBox_display->setCheckable(true);
    ui->groupBox_group->setChecked(true);
    //alignment
    textList.clear();
    textList << "AlignLeft" <<"AlignRight" << "AlignHCenter" << "AlignJustify";
    ui->comboBox_aligment->addItems(textList);
}
ContainerFrame::~ContainerFrame()
{
    delete ui;
}
void ContainerFrame::on_combo_h_currentIndexChanged(int index)
{
    ui->scrollArea->setHorizontalScrollBarPolicy((Qt::ScrollBarPolicy)index);
}
void ContainerFrame::on_combo_v_currentIndexChanged(int index)
{
    ui->scrollArea->setVerticalScrollBarPolicy((Qt::ScrollBarPolicy)index);
}
void ContainerFrame::on_combo_size_currentIndexChanged(int index)
{
    ui->scrollArea->setSizeAdjustPolicy((QAbstractScrollArea::SizeAdjustPolicy)index);
}
void ContainerFrame::on_comboBox_aligment_currentIndexChanged(int index)
{
    ui->groupBox_display->setAlignment(qPow(2, index));
}
void ContainerFrame::on_checkBox_flat_toggled(bool checked)
{
    ui->groupBox_display->setFlat(checked);
}

main.cpp

#include "containerframe.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ContainerFrame w;
    w.show();
    return a.exec();
}

现在运行程序,切换每个combobox的条目,看都有什么变化

设置SizeAdjustPolicy为AdjustToContents,水平拉伸整个窗口,看有什么变化。

好的,关于容器控件今天先讲到这里,如果你想第一时间看到小豆君的技术分享,就赶快关注吧。

欢迎关注小豆君的微信公众号:小豆君,只要关注,便可加入小豆君为大家创建的C++\Qt交流群,方便讨论学习。

相关文章
|
11月前
|
前端开发 Shell 测试技术
SAP UI5 应用里一些容器控件的介绍
SAP UI5 应用里一些容器控件的介绍
|
11月前
|
Web App开发 前端开发 JavaScript
SAP UI5 应用开发教程之一百零七 - SAP UI5 OverflowToolbar 容器控件介绍的试读版
SAP UI5 应用开发教程之一百零七 - SAP UI5 OverflowToolbar 容器控件介绍的试读版
|
11天前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
21 3
|
11天前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
16 2
|
3月前
|
容器 内存技术
Qt中常用容器组控件介绍和实操-1
Qt中常用容器组控件介绍和实操
|
3月前
|
API 容器
Qt中常用容器组控件介绍和实操-2
Qt中常用容器组控件介绍和实操
|
C++ 索引 容器
2.6 容器控件(二)
2.6 容器控件(二)
2.6 容器控件(二)
|
Python 容器
Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)
Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)
Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)
|
XML JSON 自然语言处理
SAP UI5 初学者教程之十一 :SAP UI5 容器类控件 Page 和 Panel 试读版
SAP UI5 初学者教程之十一 :SAP UI5 容器类控件 Page 和 Panel 试读版
105 0
SAP UI5 初学者教程之十一 :SAP UI5 容器类控件 Page 和 Panel 试读版
|
XML JSON 自然语言处理
SAP UI5 初学者教程之十一 :SAP UI5 容器类控件 Page 和 Panel 试读版
教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 的引导过程 Bootstrap SAP UI5 初学者教程之三:开始接触第一个 SAP UI5 控件 SAP UI5 初学者教程之四:XML 视图初探 SAP UI5 初学者教程之五:视图控制器初探 SAP UI5 初学者教程之六 - 了解 SAP UI5 的模块(Module)概念 SAP UI5 初学者教程之七 - JSON 模型初探 SAP UI5 初学者教程之八 - 多语言的支持 SAP UI5 初学者教程之九 - 创建
SAP UI5 初学者教程之十一 :SAP UI5 容器类控件 Page 和 Panel 试读版