容器

各个控件的名称依次解释如下。
(1) Group Box:组框

QGroupBox 为构建分组框提供了支持。分组框通常带有一个边
框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。布局时可用作一组控
件的容器,但是需要注意的是,内部通常使用布局控件(如 QBoxLayout)进行布局。

(2) Scroll Area:滚动区域

滚动区域用于在框架中显示子部件的内容。如果小
部件超过框架的大小,视图就会出现滚动条,以便可以查看子小部件的整个区域。

(3) Tool Box:工具箱

QToolBox 类提供了一列选项卡小部件项。工具箱是一个小部件,
它显示一列选项卡在另一列的上面,当前项显示在当前选项卡的下面。

(4) Tab Widget:标签小部件

abWidget 类提供了一组选项卡(多页面)小部件。 QTabWidget
主要是用来分页显示的,每一页一个界面,众多界面公用一块区域,节省了界面大小,很方便
的为用户显示更多的信息。

(5) Stacked WIdget:堆叠小部件

QStackedWidget 类提供了一个小部件堆栈,其中一次只能
看到一个小部件,与 QQ 的设置面板类似。 QStackedWidget 可用于创建类似于 QTabWidget 提
供的用户界面。它是构建在 QStackedLayout 类之上的一个方便的布局小部件。

(6) Frame:帧
(7) Widget:小部件
(8) MDI Area:MDI 区域
(9) Dock Widget:停靠窗体部件

Qt提供了多个基于模板 的容器类,这些容器类可以用于存储指定类型的数据项,容器类是基于模板的类,如常用的容器类QList, T是一个具体的类型,可以是int、float等简单类型,也可以是QString、QDate 等类,但不能是QObject或任何其子类。 T 必须是一个可赋值的类型,即T 必须提供一个缺省的构造函数,一个可复制构造函数和–个赋值运算符。

1
QList<QString>list; //定义一个字符串列表

Qt的容器类分为有序容器( sequential containers) 和关联容器( associative containers)

Qt的有序容器类有QList、QLinkedList、 QVector、 QStack 和QQueue。

Qt 还提供关联容器类QMap、QMultiMap、QHash、 QMultiHash 和QSet。

QTabWidget 继承 QWidget, QTabWidget 类提供了一组选项卡(多页面)小部件。 QTabWidget 主要是用来分页显示的,每一页一个界面,众多界面公用一块区域,节省了界面大小,很方便的为用户显示更多的信息。类似浏览器的多标签页面,所以这个控件在实际项目中也会经常用到 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTableWidget>
#include <QHBoxLayout>
#include <QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QWidget *widget;
QTabWidget *tabWidget;
QHBoxLayout *hBoxLayout;
QLabel *label[3];
};
#endif // MAINWINDOW_H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setGeometry( 0, 0, 800, 480);
widget = new QWidget(this);
this->setCentralWidget(widget);
tabWidget = new QTabWidget();
hBoxLayout = new QHBoxLayout();
QList<QString>strLabelList;
strLabelList<<"标签1"<<"标签2"<<"标签3";
QList<QString>strTabList;
strTabList<<"页面1"<<"页面2"<<"页面3";
QList <QString>iconList;
iconList<<":/icons/icon1"<<":/icons/icon2"<<":/icons/icon3";
for(int i = 0; i<3; i++)
{
label[i] = new QLabel();
label[i] ->setText(strLabelList[i]);
label[i] ->setAlignment(Qt::AlignCenter);
tabWidget -> addTab(label[i], QIcon(iconList[i]), strTabList[i]);
}
hBoxLayout->addWidget(tabWidget);
widget->setLayout(hBoxLayout);
}

QstackedWidget

QStackedWidget 继承 QFrame。 QStackedWidget 类提供了一个小部件堆栈,其中一次只能看到一个小部件,与 QQ 的设置面板类似。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStackedWidget>
#include <QHBoxLayout>
#include <QListWidget>
#include <QLabel>

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QWidget *widget;
QHBoxLayout *hBoxLayout;
QListWidget *listWidget;
QStackedWidget *stackedWidget;
QLabel *label[3];
};
#endif // MAINWINDOW_H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setGeometry( 0, 0, 800, 480);
widget = new QWidget(this);
this->setCentralWidget(widget);
hBoxLayout = new QHBoxLayout();
stackedWidget = new QStackedWidget();
listWidget = new QListWidget();

QList <QString>strListWidgetList;
strListWidgetList<<"窗口一"<<"窗口二"<<"窗口三";

for(int i = 0; i<3 ; i++)
{
listWidget -> insertItem(i, strListWidgetList[i] );
}
QList<QString>strLabelList;
strLabelList<<"标签一"<<"标签二"<<"标签三";
for( int i = 0; i < 3; i++)
{
label[i] = new QLabel();
label[i] ->setText(strLabelList[i]);
label[i] ->setAlignment(Qt::AlignCenter);
stackedWidget->addWidget(label[i]);
}
listWidget->setMaximumWidth(200);
hBoxLayout->addWidget(listWidget);
hBoxLayout->addWidget(stackedWidget);
widget->setLayout(hBoxLayout);
connect(listWidget, SIGNAL(currentRowChanged(int)),stackedWidget, SLOT(setCurrentIndex(int)));

}
MainWindow::~MainWindow()
{
}