常用容器组控件(Containers):
控件名称依次解释如下(常用的用红色标出):
- Group Box: 组合框: 提供带有标题的组合框框架
- Scroll Area : 滚动区域
- Tool Box: 工具箱
- Tab Widget: 标签小部件
- Stacked Widget: 堆叠部件
- Frame : 框架
- Widget: 小部件
- MdiArea : MDI 区域
- Dock Widget: 停靠窗体部件
- QAxWidget: 封装 Flash 的 ActiveX 控件
1.Group Box
QGroupBox是一个QWidget的子类,用于显示一组相关的窗口部件。QGroupBox可以带有一个标题,它通常用于对窗口部件进行分组,以便更好地组织它们。QGroupBox还可以用于设置可用性、布局和样式表。
案例分析:
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); }; #endif // WIDGET_H
main.cpp
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
widget.cpp
#include "widget.h" #include <QGroupBox> #include <QRadioButton> #include <QPushButton> #include <QCheckBox> #include <QVBoxLayout> // 可以在水平方向和垂直方向进行排列的控件,QHBoxLayout/QVBoxLayout所继承 #include <QGridLayout> #include <QMenu> Widget::Widget(QWidget *parent) : QWidget(parent) { this->setWindowTitle("QGroupBox"); // 组合框1:gpb_1 QGroupBox *gpb_1 = new QGroupBox("单选按钮组1"); QRadioButton *rbtn_1=new QRadioButton("RadioButton1"); QRadioButton *rbtn_2=new QRadioButton("RadioButton2"); QRadioButton *rbtn_3=new QRadioButton("RadioButton3"); QVBoxLayout *vbly1 = new QVBoxLayout; vbly1->addWidget(rbtn_1); vbly1->addWidget(rbtn_2); vbly1->addWidget(rbtn_3); gpb_1->setLayout(vbly1); // 组合框2:gpb_2 QGroupBox *gpb_2=new QGroupBox("复选按钮组2"); QCheckBox *cbx1=new QCheckBox("checkbox1"); QCheckBox *cbx2=new QCheckBox("checkbox2"); QCheckBox *cbx3=new QCheckBox("checkbox3"); // 全选的复选框能实时呈现(全选、半选、未选) // cbx2->setTristate(true); // 设置是否支持半选状态,默认不支持半选态 cbx2->setChecked(true); QVBoxLayout *vbly2 = new QVBoxLayout; vbly2->addWidget(cbx1); vbly2->addWidget(cbx2); vbly2->addWidget(cbx3); gpb_2->setLayout(vbly2); // 组合框3:gpb_3 QGroupBox *gpb_3=new QGroupBox("单选按钮和复选按钮组3"); gpb_3->setCheckable(true); QRadioButton *rbtn_31=new QRadioButton("RadioButton31"); QRadioButton *rbtn_32=new QRadioButton("RadioButton32"); QRadioButton *rbtn_33=new QRadioButton("RadioButton33"); QCheckBox *cbx4=new QCheckBox("checkbox4"); cbx4->setChecked(true); QVBoxLayout *vbly3=new QVBoxLayout; vbly3->addWidget(rbtn_31); vbly3->addWidget(rbtn_32); vbly3->addWidget(rbtn_33); vbly3->addWidget(cbx4); gpb_3->setLayout(vbly3); // 组合框4:gpb_4 QGroupBox *gpb_4=new QGroupBox("综合按钮组4"); gpb_4->setCheckable(true); gpb_4->setChecked(true); QPushButton *pbtn_4=new QPushButton("PushButton4"); QPushButton *pbtn_5=new QPushButton("PushButton5"); pbtn_5->setCheckable(true); // 设置按钮可以按下去 pbtn_5->setChecked(true); // 设置按钮5为默认按钮 QPushButton *pbtn_6=new QPushButton("PushButton6"); // 命令按钮6添加子菜单 QMenu *mu=new QMenu(this); mu->addAction("King"); mu->addAction("Darren"); mu->addAction("Mark"); mu->addAction("Vico"); pbtn_6->setMenu(mu); QVBoxLayout *vbly4=new QVBoxLayout; vbly4->addWidget(pbtn_4); vbly4->addWidget(pbtn_5); vbly4->addWidget(pbtn_6); gpb_4->setLayout(vbly4); QGridLayout *gdlyout=new QGridLayout; gdlyout->addWidget(gpb_1,0,0,1,1); gdlyout->addWidget(gpb_2,0,1,1,1); gdlyout->addWidget(gpb_3,1,0,1,1); gdlyout->addWidget(gpb_4,1,1,1,1); this->setLayout(gdlyout); } Widget::~Widget() { }
编译执行结果:
2.Scroll Area
QScrollArea:可以将某个控件包含在一个滚动区域内,当控件内容超出显示区域时,用户可以通过滚动条来查看所有内容。
首先添加一张图片
显示一张图片滑动案例分析:
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); }; #endif // WIDGET_H
main.cpp
#include "widget.h" #include <QApplication> #include <QLabel> #include <QScrollArea> // QScrollArea当中有很多功能继承来自于QAbstractScrollArea #include <QGridLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.resize(300,200); QLabel *qljpg=new QLabel; qljpg->setScaledContents(true); QImage imagejpg(":/new/prefix1/image01/1.png"); qljpg->setPixmap(QPixmap::fromImage(imagejpg)); QScrollArea *sArea=new QScrollArea; // 居中 sArea->setAlignment(Qt::AlignCenter); // 根据窗口比例显示 // sArea->setWidgetResizable(true); sArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); // 水平滑动 sArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); // 垂直滑动 sArea->setWidget(qljpg); QGridLayout *glayout=new QGridLayout; glayout->addWidget(sArea); w.setLayout(glayout); w.show(); return a.exec(); }
widget.cpp
#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { } Widget::~Widget() { }
编译执行结果(可水平和垂直滑动图片):
Qt中常用容器组控件介绍和实操-2