Qt之容器组件的使用

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅笑一斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值