1.QGroupBox (标题框)
提供带有标题的组框框架,
QGroupBox不会自动布置子窗口小部件
QGroupBox框通常用于将QCheckBoxes和QRadioButtons组织到互斥组中
2.QScrollArea (自动滚动区域)
能够为 widget(或其子类) 添加滚动视图 。
滚动视图可以在widget的尺寸超过整个框架的尺寸时,显示滚动条
3.QToolBox (类似抽屉的窗体)
提供一种列状的层叠窗体,QToolButton提供了一种快速访问命令或选择项的按钮,通常在工具条中使用.
比如像QQ好友分类列表的开发使用
4.QStackWidget (堆栈窗口,存储与切换widget容器)
管理QWidget的容器,一次只能显示一个QWidget
5.QFrame (美化窗体)
基本控件的基类,QWidget是QFrame基类, 功能作用是控制边框样式,框架阴影,框架形状
实质上就是在widget的基础上多做了一些工作,如拓展了一些样式阴影等显示美化功能
lineWidth调整边框边界线的宽度,midLineWidth是在边框中插入一条线的宽度,用于营造3D效果,此效果只有在Box/HlineVline凸起或者凹陷时有效
常用属性:
QFrame::NoFrame:不绘制。
QFrame::Box:绘制一个四周边框。
QFrame::Panle:绘制面板,呈现凸起或者凹陷效果。
QFrame::Styledpanle:绘制矩形面板,依赖于当前GUI样式,凸起或凹陷效果。
QFrame::HLine:没有框架的水平线,可以作为分离器。
QFrame::VLine:没有框架的垂直线,可以作为分离器。
QFrame::WinPanel:windows风格矩形面板,凸起或凹陷效果。
QFrame::Plian:平面,没有3D效果。
QFrame::Raised:3D凸起。
QFrame::Sunken:3D凹陷。
6.QMdiArea (多文档窗口管理器)
MDI多窗体组件,MDI多窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体中内嵌多种子窗体的功能
场景:在主窗口内部增加多个活动的子窗口
常用方法:
addSubWindow //添加子窗体
closeAllSubWindows //关闭所有子窗体
QMdiArea为子窗口提供了两个内建的布局策略:
cascadeSubWindows() //子窗体级联方式
tileSubWindows() //子窗体平铺方式
setViewMode() // SubWindowView:显示带有窗口框架的子窗口 TabbedView:在选项卡栏中显示带有选项卡的子窗口
7.QDockWidget (悬浮窗体)
QDockWidget类提供了一个特殊的窗口部件,它可以是被锁在QMainWindow窗口内部或者是作为顶级窗口悬浮在桌面上.
QDockWidget可以移动、悬浮,在许多工程软件中,都是使用dock布局窗口,用户可以自由组合窗口界面
QDockWidget目前只有锁定在QMainWindow窗口内部,才能展现出QDockWidget应有的属性,(***)如果将QDockWidget放到布局管理器当中,那么就只能当作QWidget使用了
常用方法:
setFeatures
//DockWidgetClosable:停靠窗口可以关闭;
//DockWidgetMovable:停靠窗口可以移动;
//DockWidgetFloatable:停靠窗口可以浮动;
//AllDockWidgetFeatures:停靠窗口可以所有属性
//NoDockWidgetFeatures:停靠窗口没有所有属性
setAllowedAreas()//设置窗口停靠方式
8.QAxWidget (包装控件widget)
QAxWidget类是一个包装ActiveX控件的QWidget
可以调用例如web、word,excel,powerpoint,pdf,flash等
pro:
CONFIG += axcontainer
常用方法:
setControl//关联组件
setProperty//设置属性
dynamicCall //方法调用
代码
widgetcontainers.h
#ifndef WIDGETCONTAINERS_H
#define WIDGETCONTAINERS_H
#include <QWidget>
#include <QToolButton>
namespace Ui {
class WidgetContainers;
}
class WidgetContainers : public QWidget
{
Q_OBJECT
public:
explicit WidgetContainers(QWidget *parent = nullptr);
~WidgetContainers();
//QGroupBox
void initGroupBox();
//QScrollArea
void initScrollArea();
//QToolBox
void initToolBox();
//QStackWidget
void initStackWidget();
//QFrame
void intiFrame();
//QDockWidget
void initDockWidget();
protected:
void changeEvent(QEvent* event);
private:
void retranslateUi();
private slots:
//QToolBox
void on_toolBox_currentChanged(int index);
//QStackWidget
void on_btn_stackwidget1_clicked();
void on_btn_stackwidget2_clicked();
//QScrollArea
void on_pushButtonImage_clicked();
void on_pushButtons_clicked();
//QFrame
void on_btn_frameuse1_clicked();
void on_btn_frameuse2_clicked();
//QMdiArea
void on_btn_opendialog_clicked();
void on_btn_closedialog_clicked();
void on_btn_mdi_clicked();
void on_btn_cascade_clicked();//级联
void on_btn_tile_clicked();//平铺
//QAxWidget
void on_btn_webopen_clicked();
void on_btn_browseropen_clicked();
private:
Ui::WidgetContainers *ui;
bool m_bMdi;
};
#endif // WIDGETCONTAINERS_H
widgetcontainers.cpp
#include "widgetcontainers.h"
#include "ui_widgetcontainers.h"
#include <QLabel>
#include "mdidialog.h"
#include <QAxObject>
#include "commondef.h"
WidgetContainers::WidgetContainers(QWidget *parent) :
QWidget(parent),
ui(new Ui::WidgetContainers)
{
ui->setupUi(this);
//QGroupBox
initGroupBox();
//QScrollArea
initScrollArea();
//QToolBox
initToolBox();
//QStackWidget
initStackWidget();
//QFrame
intiFrame();
//QDockWidget
initDockWidget();
retranslateUi();
}
WidgetContainers::~WidgetContainers()
{
delete ui;
}
/*************************
* QGroupBox
* ***********************/
void WidgetContainers::initGroupBox()
{
//去除边框
ui->groupBox_radio->setFlat(false);
//设置标题
ui->groupBox_radio->setTitle(tr("Radio"));
ui->groupBox_radio->setCheckable(false);
ui->groupBox_radio->setChecked(false);
ui->groupBox_checkbox->setFlat(false);
//设置标题
ui->groupBox_checkbox->setTitle(tr("Checkbox"));
ui->groupBox_checkbox->setCheckable(false);
ui->groupBox_checkbox->setChecked(false);
//设置对齐方式
ui->groupBox_radio->setAlignment(Qt::AlignLeft);
}
/*************************
* QScrollArea
* ***********************/
void WidgetContainers::initScrollArea()
{
}
void WidgetContainers::on_pushButtonImage_clicked()
{
//设置图片自动滚动显示
QLabel *imageLabel = new QLabel(this);
imageLabel->setPixmap(QPixmap(":/Resource/Image/WidgetContains/testscrollarea.jpg"));
ui->scrollArea->setWidget(imageLabel);
}
void WidgetContainers::on_pushButtons_clicked()
{
QVBoxLayout *vLayout = new QVBoxLayout();
QPushButton *a1= new QPushButton("button1");
a1->setMinimumHeight(50);
vLayout->addWidget(a1);
QPushButton *a2= new QPushButton("button2");
a2->setMinimumHeight(50);
vLayout->addWidget(a2);
QPushButton *a3= new QPushButton("button3");
a3->setMinimumHeight(50);
vLayout->addWidget(a3);
QPushButton *a4= new QPushButton("button4");
a4->setMinimumHeight(50);
vLayout->addWidget(a4);
QPushButton *a5= new QPushButton("button5");
a5->setMinimumHeight(50);
vLayout->addWidget(a5);
QPushButton *a6= new QPushButton("button6");
a6->setMinimumHeight(50);
vLayout->addWidget(a6);
QPushButton *a7= new QPushButton("button7");
a7->setMinimumHeight(50);
vLayout->addWidget(a7);
QPushButton *a8= new QPushButton("button8");
a8->setMinimumHeight(50);
vLayout->addWidget(a8);
QPushButton *a9= new QPushButton("button9");
a9->setMinimumHeight(50);
vLayout->addWidget(a9);
ui->scrollArea->setFrameShape(QFrame::NoFrame);
QWidget *pWidget = new QWidget();
pWidget->setLayout(vLayout);
ui->scrollArea->setWidget(pWidget);
}
/*************************
* QToolBox
* ***********************/
void WidgetContainers::initToolBox()
{
//设置标题
ui->toolBox->setWindowTitle(tr("Application"));
//设置Item
ui->toolBox->setItemIcon(0, QIcon(":/Resource/Image/WidgetContains/icon_upward.png"));
ui->toolBox->setItemText(0, tr("Basic Applications:"));
ui->toolBox->setItemIcon(1, QIcon(":/Resource/Image/WidgetContains/icon_upward.png"));
ui->toolBox->setItemText(1, tr("Advanced Applications:"));
}
void WidgetContainers::on_toolBox_currentChanged(int index)
{
if(index == 0)
{
ui->toolBox->setItemIcon(0, QIcon(":Resource/Image/WidgetContains/icon_down.png"));
ui->toolBox->setItemIcon(1, QIcon(":/Resource/Image/WidgetContains/icon_upward.png"));
}
else if (index == 1)
{
ui->toolBox->setItemIcon(0, QIcon(":/Resource/Image/WidgetContains/icon_upward.png"));
ui->toolBox->setItemIcon(1, QIcon(":Resource/Image/WidgetContains/icon_down.png"));
}
}
/*************************
* QStackWidget
* ***********************/
void WidgetContainers::initStackWidget()
{
on_btn_stackwidget1_clicked();
}
void WidgetContainers::on_btn_stackwidget1_clicked()
{
ui->stackedWidget->setCurrentIndex(0);
}
void WidgetContainers::on_btn_stackwidget2_clicked()
{
ui->stackedWidget->setCurrentIndex(1);
}
/*************************
* QFrame
* ***********************/
void WidgetContainers::intiFrame()
{
on_btn_frameuse1_clicked();
}
void WidgetContainers::on_btn_frameuse1_clicked()
{
ui->frame->setStyleSheet("background-color:grey");
ui->frame->setLineWidth(1);
ui->frame->setMidLineWidth(2);
ui->frame->setFrameShape(QFrame::Box);
ui->frame->setFrameShadow(QFrame::Raised);//凸起
}
void WidgetContainers::on_btn_frameuse2_clicked()
{
ui->frame->setStyleSheet("background-color:grey");
ui->frame->setLineWidth(3);
ui->frame->setMidLineWidth(3);
ui->frame->setFrameShape(QFrame::WinPanel);
ui->frame->setFrameShadow(QFrame::Sunken);//凹陷
}
/*************************
* QMdiArea
* ***********************/
void WidgetContainers::on_btn_opendialog_clicked()
{
MdiDialog *mdiDlg = new MdiDialog(this);
ui->mdiArea->addSubWindow(mdiDlg);
mdiDlg->show();
}
void WidgetContainers::on_btn_closedialog_clicked()
{
ui->mdiArea->closeAllSubWindows();
}
void WidgetContainers::on_btn_mdi_clicked()
{
if(m_bMdi)// Tab多页显示模式
{
ui->mdiArea->setViewMode(QMdiArea::TabbedView);
ui->mdiArea->setTabsClosable(true);
m_bMdi = false;
}
else// 子窗口模式
{
ui->mdiArea->setViewMode(QMdiArea::SubWindowView);
m_bMdi = true;
}
}
void WidgetContainers::on_btn_cascade_clicked()
{
ui->mdiArea->cascadeSubWindows();
}
void WidgetContainers::on_btn_tile_clicked()
{
ui->mdiArea->tileSubWindows();
}
/*************************
* QDockWidget
* ***********************/
void WidgetContainers::initDockWidget()
{
ui->dockWidget->setWindowTitle(tr("dock1"));
ui->dockWidget->setFeatures(QDockWidget::AllDockWidgetFeatures);
ui->dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea);
ui->dockWidget_2->setWindowTitle(tr("dock2"));
ui->dockWidget_2->setFeatures(QDockWidget::AllDockWidgetFeatures);
ui->dockWidget_2->setAllowedAreas(Qt::RightDockWidgetArea);
ui->dockWidget_3->setWindowTitle(tr("dock3"));
ui->dockWidget_3->setFeatures(QDockWidget::AllDockWidgetFeatures);
ui->dockWidget_3->setAllowedAreas(Qt::TopDockWidgetArea);
ui->dockWidget_4->setWindowTitle(tr("dock4"));
ui->dockWidget_4->setFeatures(QDockWidget::AllDockWidgetFeatures);
ui->dockWidget_4->setAllowedAreas(Qt::BottomDockWidgetArea);
}
/*************************
* QAxWidget
* ***********************/
void WidgetContainers::on_btn_webopen_clicked()
{
//关联组件
ui->axWidget->setControl("Shell.Explorer");
//方法调用
ui->axWidget->dynamicCall("Navigate(QString)", "F:/IPC-windows/mydemo/myCommonUI/Bin/web/nsis.html");
}
void WidgetContainers::on_btn_browseropen_clicked()
{
//关联组件
ui->axWidget->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}"));
//设置属性
ui->axWidget->setProperty("DisplayAlerts", false);//不显示警告信息
ui->axWidget->setProperty("DisplayScrollBars", true);//不显示滚动条
//方法调用
QString webstr = QString("baidu.com");//设置要打开的网页
ui->axWidget->dynamicCall("Navigate(const QString&)", webstr);//显示网页
}
void WidgetContainers::changeEvent(QEvent *event)
{
switch(event->type())
{
case QEvent::LanguageChange:
retranslateUi();
break;
default:
QWidget::changeEvent(event);
}
}
void WidgetContainers::retranslateUi()
{
ui->pushButtons->setText(tr("Show Buttons"));
ui->pushButtonImage->setText(tr("Show Image"));
ui->toolBox->setItemText(0, tr("Basic Application"));
ui->toolBox->setItemText(1, tr("Advanced Application"));
ui->btn_stackwidget1->setText(tr("Stack Widget1"));
ui->btn_stackwidget2->setText(tr("Stack Widget2"));
ui->btn_frameuse1->setText(tr("Use Box/Raised"));
ui->btn_frameuse2->setText(tr("Use WinPanel/Sunken"));
ui->btn_opendialog->setText(tr("Create Dialog"));
ui->btn_closedialog->setText(tr("Close All"));
ui->btn_cascade->setText(tr("Cascade"));
ui->btn_tile->setText(tr("Tile"));
ui->btn_webopen->setText(tr("Open Html"));
ui->btn_browseropen->setText(tr("Open Browser Web"));
}
mdidialog.h
#ifndef MDIDIALOG_H
#define MDIDIALOG_H
#include <QDialog>
namespace Ui {
class MdiDialog;
}
class MdiDialog : public QDialog
{
Q_OBJECT
public:
explicit MdiDialog(QWidget *parent = nullptr);
~MdiDialog();
QString currentFileName();
void setData(QString data);
private:
Ui::MdiDialog *ui;
};
#endif // MDIDIALOG_H
mdidialog.cpp
#include "mdidialog.h"
#include "ui_mdidialog.h"
MdiDialog::MdiDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MdiDialog)
{
ui->setupUi(this);
this->setWindowTitle(tr("Test Dialog1"));
this->setAttribute(Qt::WA_DeleteOnClose);
this->setFixedSize(400, 300);
}
MdiDialog::~MdiDialog()
{
delete ui;
}
QString MdiDialog::currentFileName()
{
QString title = this->windowTitle();
return title;
}
void MdiDialog::setData(QString data)
{
ui->lineEdit->setText(data);
}
实现效果:
QGroupBox
QScrollArea
QToolBox
QStackWidget
QFrame
QMdiArea
QDockWidget
QAxWidget
工程下载路径:
https://download.csdn.net/download/linyibin_123/86512679