Qt5 -- 容器控件 QFrame / QScrollArea / QGroupBox / QTabWidget / QToolBox

作者及原代码链接:跟小豆君学Qt

跟着学习;完整实现代码;示例截图;

QFrame:带边框的QWidget,有突起或凹陷的效果;

QScrollArea: 滚动窗口类,提供了一个垂直和水平的滚动条,用以浏览整个窗口;

  • Qt::ScrollBarAsNeeded:无法完全显示窗口时,显示滚动条,否则不显示;
  • Qt::ScrollBarAlwaysOff:不显示滚动条;
  • Qt::ScrollBarAlwaysOn:始终显示滚动条;

     SizeAdjustPolicy 

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

QGroupBox: 多个控件表示同一类操作或显示时, 用一个矩形框包起这些控件

  • 标题位置 alignment
  • 是否需要扁平化处理flat
  • 是否可选checkable,已经被选中

QTabWidget:显示不同的信息窗口

每个标签都与一个tab页关联,当激活一个标签,则对应的tab页显示,其它tab页隐藏。从左至右每个标签对应索引0~n

documentMode:可见区域是否以文档模式显示;

elideMode:当标签文字很长时,对于标签文字显示应该采用的省略策略;

  • Qt::ElideLeft:省略号在左边。
  • Qt::ElideRight:省略号在右边。
  • Qt::ElideMiddle:省略号在中间。
  • Qt::ElideNone:显示全部文字。

moveable:是否可交换标签和其它标签前后顺序;

tabBarAutoHide:当只有一个标签时,该标签可以自动隐藏;

tabPosition:标签可以放在可见区域的位置;

  • QTabWidget::North:(北)上方。
  • QTabWidget::South:(南)下方。
  • QTabWidget::West:(西)左方。
  • QTabWidget::East:(东)右方。

tabShape:签也不同的形状;

  • QTabWidget::Rounded:默认矩形。
  • QTabWidget::Triangular:三角形。

tabsClosable:标签是否可以关闭;

usesScrollButtons:标签多了,可以使用滚动按钮;

QToolBox:类似于QQ的分组界面;

count用来记录分组item的个数,currentIndex记录当前展开的item页。并且索引也都是从0开始;

示例一(QFrame / QScrollArea / QGroupBox):

对应控件:

运行结果:

对应代码实现:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QtMath>
#include <QGroupBox>
#include <QScrollArea>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // frame 属性
    ui->frame->setFrameShadow(QFrame::Raised);
    ui->frame->setFrameShape(QFrame::Box);
    ui->frame->setMidLineWidth(5);
    ui->frame->setLineWidth(2);

    // QScrollArea 属性
    //创建label作为滚动区域的中心部件,设置label最小宽度和高度,以便可以有滚动条出现
    QLabel* label = new QLabel("scroll\area\nneed\ndisplay\nme");
    label->setMinimumHeight(500);
    label->setMinimumWidth(600);
    ui->scrollArea->setWidget(label);

    // QScrollBar 属性
    QStringList textList;
    textList << "ScrollBarAsNeeded" <<"ScrollBarAlwaysOff" << "ScrollBarAlwaysOn";
    ui->comboBox->addItems(textList);
    ui->comboBox_2->addItems(textList);

    // QGroupBox 属性
    ui->groupBox->setCheckable(true);
    ui->groupBox_2->setCheckable(true);

    // sizeAdjustPolicy
    textList.clear();
    textList << "AdjustIgnored" << "AdjustToContentsOnFirstShow" << "AdjustToContents";
    ui->comboBox_3->addItems(textList);

    // alignment
    textList.clear();
    textList << "AlignLeft" <<"AlignRight" << "AlignHCenter" << "AlignJustify";
    ui->comboBox_4->addItems(textList);
}


Widget::~Widget()
{
    delete ui;
}


void Widget::on_comboBox_currentIndexChanged(int index)
{
    ui->scrollArea->setHorizontalScrollBarPolicy((Qt::ScrollBarPolicy)index);
}

void Widget::on_comboBox_2_currentIndexChanged(int index)
{
    ui->scrollArea->setVerticalScrollBarPolicy((Qt::ScrollBarPolicy)index);
}


void Widget::on_comboBox_3_currentIndexChanged(int index)
{
    ui->scrollArea->setSizeAdjustPolicy((QAbstractScrollArea::SizeAdjustPolicy)index);
}


void Widget::on_comboBox_4_currentIndexChanged(int index)
{
    ui->groupBox_4->setAlignment(qPow(2, index));
}

void Widget::on_checkBox_toggled(bool checked)
{
    ui->groupBox_4->setFlat(checked);
}

示例二(QFrame / QTabWidget / QToolBox)

对应控件:

运行界面:

示例代码(widget.cpp):

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // QTabWidget:标签省略
    QStringList textList;
    textList << "ElideLeft" <<"ElideRight" << "ElideMiddle" << "ElideNone";
    ui->elideModel->addItems(textList);

    // 标签位置:
    textList.clear();
    textList << "North" << "South" << "West" << "East";
    ui->tabPosition->addItems(textList);

    // 标签形状
    textList.clear();
    textList << "Rounded" << "Triangular";
    ui->tabShape->addItems(textList);

    // 连接关闭槽
    connect(ui->tabWidget, &QTabWidget::tabCloseRequested,
            ui->tabWidget, &QTabWidget::removeTab);

    // 添加标签
    ui->tabWidget->addTab(new QLabel("Add Tab"), tr("third song"));
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_elideModel_currentIndexChanged(int index)
{
    ui->tabWidget->setElideMode((Qt::TextElideMode)index);
}

void Widget::on_tabPosition_currentIndexChanged(int index)
{
    ui->tabWidget->setTabPosition((QTabWidget::TabPosition)index);
}

void Widget::on_tabShape_currentIndexChanged(int index)
{
    ui->tabWidget->setTabShape((QTabWidget::TabShape)index);
}

void Widget::on_DocumentMode_toggled(bool checked)
{
    ui->tabWidget->setDocumentMode(checked);
}

void Widget::on_moveable_toggled(bool checked)
{
    ui->tabWidget->setMovable(checked);
}

void Widget::on_barAutoHide_toggled(bool checked)
{
    ui->tabWidget->setTabBarAutoHide(checked);
}

void Widget::on_closeble_toggled(bool checked)
{
    ui->tabWidget->setTabsClosable(checked);
}

void Widget::on_userScrollButton_toggled(bool checked)
{
    ui->tabWidget->setUsesScrollButtons(checked);
}

void Widget::on_btn_insert_clicked()
{
    ui->toolBox->addItem(new QLabel("new item"), tr("untitled"));
}

void Widget::on_btn_delete_clicked()
{
    int index = ui->toolBox->currentIndex();
    if (index != -1){
        ui->toolBox->removeItem(index);
    }
}

猜你喜欢

转载自blog.csdn.net/francislucien2017/article/details/85279635