美文网首页Qt学习程序员C++
2.6 容器控件(一)

2.6 容器控件(一)

作者: 223480235e8e | 来源:发表于2017-09-18 18:13 被阅读103次

今天及后面几天,小豆君主要来讲一下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的属性

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

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

2.6.2 QScrollArea

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

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

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

QAbstractScrollArea的新增属性: Paste_Image.png

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

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

SizeAdjustPolicy:

  • QAbstractScrollArea::AdjustIgnored:视口改变大小,滚动区域并不改变大小
  • QAbstractScrollArea::AdjustToContents:视口改变大小,滚动区域也改变大小
  • QAbstractScrollArea::AdjustToContentsOnFirstShow:在第一次显示时就改变滚动区域的大小
    当想要将滚动条定位到某个位置时,可以获取水平或垂直滚动条指针,并调用setValue()接口。

2.6.3 QGroupBox

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

我们来看一下QGroupBox的属性:

Paste_Image.png
标题位置 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界面类

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

Paste_Image.png
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,水平拉伸整个窗口,看有什么变化。

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

相关文章

  • 2.6 容器控件(一)

    今天及后面几天,小豆君主要来讲一下Qt其它常用控件的用法。主要包括: 容器控件 按钮控件 输入控件 显示控件显示控...

  • 2.6 容器控件(二)

    今天介绍容器控件的QTabWidget和QToolBox。 2.6.5 QTabWidget 当我们需要显示不同的...

  • SWT中Control(控件)介绍

    Control(控件)就是我们能够在用户界面上看到的用户界面元素,可以分为容器控件和非容器控件,容器控件可包含其他...

  • View的事件体系

    View基础知识 什么是View Android中的控件主要分为容器控件和普通控件,它们都继承View父类,容器控...

  • 2018-11-29

    任务2.6密码修改界面功能设计一.gif文件 控件B:TextBox 控件C:Button 三. 界面设计1.登陆...

  • Android中的几种基本布局

    布局是一种可以放置很多控件的容器,在容器中的控件会按照容器规定的布局规则来放置自己,系统有很多这样的容器,但是最基...

  • vs2017开发ActiveX(主讲OCX)(七)、方法

    方法 ActiveX控件触发事件以在其自身与其控件容器之间进行通信。容器还可以通过方法和属性与控件通信。方法也称为...

  • Container

    Container(容器控件)在Flutter是经常使用的控件,它就相当于我们HTML里的 标签。容器属性:Ali...

  • Android开发(24)——测量与布局:子控件和父容器尺寸都不

    本节内容1.测量单个子控件确定容器尺寸 一、测量单个子控件确定容器尺寸1.先创建一个类,继承自ViewGroup,...

  • 05-列表视图ListView

    ListView控件的常用属性: 属性说明Name控件的名称Dock控件在父容器中的停靠方式Items包含控件中所...

网友评论

    本文标题:2.6 容器控件(一)

    本文链接:https://www.haomeiwen.com/subject/euajdxtx.html