Qt Desiger常用控件示例

前言

这里针对Qt Designger界面简单总结了一些示例。

Qt Designger界面控件

在这里插入图片描述

示例代码界面

在这里插入图片描述
在这里插入图片描述

示例源码实现

获取示例源码方式1:

通过gitee获取:gitee源码地址

获取示例源码方式2:

复制下面源码即可
在这里插入图片描述
.pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11
CONFIG  += qaxcontainer

QT       += qml quick
QT       += quickwidgets
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

# 编译时复制文件
CONFIG += file_copies
# 复制源文件目录
code.files = $$PWD/mainwindow.cpp
code1.files = $$PWD/mainwindow.h

win32 {
        CONFIG(release, debug|release):{
#可执行文件生成路径
            DESTDIR = $$PWD/release/
            # 复制目标目录
            code.path = $$PWD/release/
            code1.path = $$PWD/release/
        }
        else:CONFIG(debug, debug|release):{
            DESTDIR = $$PWD/../../debug/ControlsSummary/
            # 复制目标目录
            code.path = $$PWD/debug/
            code1.path = $$PWD/debug/
        }
}
COPIES +=code code1


RESOURCES += \
    src.qrc

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QShowEvent>
#include <QHideEvent>
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QTableWidget>
#include <QTreeWidget>
#include <QDockWidget>
#include <QStackedWidget>
#include <QTabWidget>
#include <QApplication>
#include <QLabel>
#include <QCheckBox>
#include <QPushButton>
#include <QLayout>
#include <QFormLayout>
#include <QMessageBox>
#include <QHeaderView>
#include <QProgressBar>
#include <QScrollBar>
#include <QActionGroup>
#include <QMessageBox>
#include <QImageReader>
#include <QImage>
#include <QStyleFactory>
#include <QTextBrowser>
#include <QFile>
#include <QDebug>
#include <QLineEdit>
#include <QMessageBox>
#include <QToolButton>
#include <QApplication>
#include <QRadioButton>
#include <QButtonGroup>
#include <QCheckBox>
#include <QCommandLinkButton>
#include <QDialogButtonBox>
#include <QStringListModel >
#include <QMenu>
#include <QVariant>
#include <QStandardItem>
#include <QListView>
#include <QColumnView>
#include <QUndoStack>
#include <QUndoView>
#include <QListWidget>
#include <QListWidgetItem>
#include <QTreeWidget>
#include <QGroupBox>
#include <QScrollArea>
#include <QToolBox>
#include <QTabWidget>
#include <QMdiArea>
#include <QTextBrowser>
#include <QFileDialog>
#include <QMdiSubWindow>
#include <QAxWidget>
#include <QComboBox>
#include <QFontComboBox>
#include <QPlainTextEdit>
#include <QSpinBox>
#include <QTimeEdit>
#include <QDial>
#include <QTimer>
#include <QScrollBar>
#include <QSlider>
#include<QKeySequenceEdit>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <QCalendarWidget>
#include <QLCDNumber>
#include <QOpenGLWidget>
#include <QQuickWidget>

//key:撤销视图
class Mybtn: public QPushButton
{
    Q_OBJECT
public:
    Mybtn(const QString &text, QWidget* parent= nullptr): QPushButton(parent)
    {
        m_widget = parent;
       this->setWindowFlag(Qt::FramelessWindowHint);
       m_status = false;
       setText(text);
       setMouseTracking(true);
    }
    void mouseMoveEvent(QMouseEvent* event)
    {
        if(m_status)
        {
            if(event->pos().x() > m_widget->width() || event->pos().x() < 0)
                return;
            move(event->pos());
            emit sigMove(this, event->pos());
        }
    }
    void mousePressEvent(QMouseEvent* event)
    {
        if(event->button()==Qt::LeftButton)
            m_status = true;
    }
    void mouseReleaseEvent(QMouseEvent* event)
    {
        m_status = false;
    }

    bool m_status;
    QWidget* m_widget;
signals:
    void sigMove(Mybtn*, QPoint);
};


//添加item
class addCommand :public QUndoCommand
{
public :
    addCommand(Mybtn* btn, QUndoCommand* parent = 0)
        :QUndoCommand(parent)
    {
        m_btn = btn;
        setText("add btn");//undoView 中就会显示(父类的方法)
    }
    void redo() override//重写这两个函数
    {
       m_btn->show();
       m_btn->move(0,0);
    }
    void undo() override
    {
        m_btn->hide();
    }
private:

    Mybtn* m_btn;
};
//key:撤销视图

//移动item
class moveCommand:public QUndoCommand
{
public:
    moveCommand(Mybtn* btn, const QPoint oldPos,QUndoCommand* parent = 0)
        :QUndoCommand(parent)
    {
        m_btn = btn;
        m_oldPos = oldPos;
        m_newPos = btn->pos();
    }
    void redo() override//重写这两个函数
    {
        m_btn->move(m_newPos);
        setText(QString("Move btn:(%1,%2)")
                .arg(m_newPos.x()).arg(m_newPos.y()));

    }
    void undo() override
    {
        m_btn->move(m_oldPos);
        setText(QString("Move btn:(%1,%2)")
                .arg(m_oldPos.x()).arg(m_oldPos.y()));
    }
private:
    Mybtn* m_btn;
    QPoint m_oldPos;
    QPoint m_newPos;

};


class RightWidget : public QWidget
{
    Q_OBJECT
public:
    RightWidget(QWidget* parent=nullptr):QWidget(parent)
    {
        QVBoxLayout* vbox = new QVBoxLayout(this);
        QHBoxLayout* hbox = new QHBoxLayout;
        m_labelTitle = new QLabel("关键代码", this);
        QPushButton* btn = new QPushButton("运行效果", this);
        m_textBrow = new QTextBrowser(this);
        hbox->addWidget(m_labelTitle);
        hbox->addWidget(btn);
        vbox->addLayout(hbox);
        vbox->addWidget(m_textBrow);
        setLayout(vbox);
        hbox->setMargin(0);
        vbox->setMargin(0);
        connect(btn,&QPushButton::clicked,this,[=](){
            emit ClickBtn();
        });
    }
    ~RightWidget(){}

    void SetText(QString key, QString fileName =  "/mainwindow.cpp" )
    {
        m_labelTitle->setText(key + "关键代码");
        QString path = QCoreApplication::applicationDirPath() + fileName;
        QFile file(path);
        if(file.open(QIODevice::ReadOnly))
        {
           QString str = file.readAll();
           QStringList list = str.split("//key:" + key);
           qDebug()<<"str:"<<str<<" key:"<<key<<" list:"<<list.length();
           if(list.length() > 1)
                m_textBrow->append(list.at(1));
        }
        file.close();
    }
signals:
    void ClickBtn();
private:
    QTextBrowser* m_textBrow;
    QLabel* m_labelTitle;
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void InitWidget();
protected:
    void showEvent(QShowEvent* event);
    void hideEvent(QHideEvent* event);
signals:
    void OnitemDoubleClicked(QString str);
private:
    QStackedWidget* m_rightStackWidget;
    QMap<QString ,RightWidget*> m_mapRightWidget;

};
#endif // MAINWINDOW_H

.cpp


#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(1000,500);
}

MainWindow::~MainWindow()
{
}

void MainWindow::InitWidget()
{
    QWidget* widget =new QWidget(this);
    QHBoxLayout* hbox  = new QHBoxLayout(widget);
    m_rightStackWidget = new QStackedWidget(widget);
    QTreeWidget* treeWidget = new QTreeWidget(widget);
    hbox->addWidget(treeWidget);
    hbox->addWidget(m_rightStackWidget);
    widget->setLayout(hbox);
    this->setCentralWidget(widget);
    hbox->setMargin(0);
    treeWidget->setFixedWidth(200);
    //需加 #include <QStyleFactory>
    treeWidget->setStyle(QStyleFactory::create("windows"));//显示节点虚线 - +
    treeWidget->setColumnCount(1); //设置列数
    treeWidget->headerItem()->setHidden(true);//隐藏表头
    treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch);//设置列宽自动分均
    treeWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//禁止编辑
    treeWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//以行为单位选择

    QStringList rootList;
    rootList<< "Layouts" << "Spacers" << "Buttons" << "Item Views(Model-Based)"
            <<"Item Widgets(Item-Based)" << "Containers" <<"Input Widgets" << "Display Widgets";
    QList<QStringList> list;
    QStringList layoutsList;
    layoutsList << "Vertical Layout" << "Horizontal Layout" << "Grid Layout" << "Form Layout";
    list.append(layoutsList);

    QStringList SpacersList;
    SpacersList << "Horizontal Spacer" << "Vertical Spacer";
    list.append(SpacersList);

    QStringList buttonsList;
    buttonsList << "Push Button" << "Tool Button" << "Radio Button"
                << "Check box" << "Command Link Button" << "Dialog Button Box";
    list.append(buttonsList);

    QStringList itemViewsList;
    itemViewsList << "List View" << "Tree View"
                  << "Table View" << "Column View" << "Undo View";
    list.append(itemViewsList);

    QStringList itemWidgetsList;
    itemWidgetsList << "List Widget" << "Tree Widget" << "Table Widget";
    list.append(itemWidgetsList);

    QStringList containersList;
    containersList << "Group Box" << "Scroll Area" << "Tool Box"
                   << "Tab Widget" << "Stacked Widget" << "Frame"
                   << "Widget" << "MDI Area" << "Dock Widget" << "QAxWidget";
    list.append(containersList);

    QStringList inputWidgetsList;
    inputWidgetsList << "Combo Box" << "Font Combo Box" << "Line Edit"
                   << "Text Edit" << "Plain Text Edit" << "Spin Box"
                   << "Double Spin Box" << "Time Edit" << "Data Edit"
                   << "Data/Time Edit" << "Dial" << "Horizontal Scroll Bar"
                   << "Vertical Scroll Bar" << "Horizontal Slider"<< "Vertical Slider" << "Key Sequence Edit";
    list.append(inputWidgetsList);

    QStringList displaysList;
    displaysList << "Label" << "Text Browser" << "Graphics View"
                   << "Calendar Widget" << "LCD Number" << "Progress Bar"
                   << "Horizontal Line" << "Verical Line" << "OpenGl Widget" << "QQuickWidget";
    list.append(displaysList);

    QList<QIcon> displays_iconList;
    QStringList iconPathList;
    iconPathList << ":/image/layouts.png" << ":/image/spacers.png"
                 << ":/image/buttons.png" << ":/image/itemViews.png"
                 << ":/image/itemWidgets.png" << ":/image/containers.png"
                 << ":/image/inputWidgets.png" << ":/image/displayWidgets.png";
    QSize iconSize(30,24);
    for (int i=0; i<iconPathList.length(); i++) {
        QImageReader reader;
        reader.setFileName(iconPathList[i]);
        int length  = reader.size().height()/iconSize.height();
        QImage  image = reader.read();
        for (int j=0; j< length; j++) {
             QImage  image_1 = image.copy(0, j*iconSize.height(), iconSize.width(), iconSize.height());
             displays_iconList.append(QIcon(QPixmap::fromImage(image_1)));
        }
    }

    for (int i=0, n=0; i<rootList.length(); i++) {
        QTreeWidgetItem* item = new QTreeWidgetItem;
        item->setText(0, rootList[i]);
        item->setTextAlignment(0, Qt::AlignCenter);
        treeWidget->addTopLevelItem(item);
        if(i < list.length())
        for (int j=0; j<list[i].length(); j++) {
            QTreeWidgetItem* itemChild = new QTreeWidgetItem;
            itemChild->setText(0, list[i][j]);
            itemChild->setTextAlignment(0, Qt::AlignLeft);
            if(n < displays_iconList.length()){
                itemChild->setIcon(0, displays_iconList[n]);
                n++;
            }
            item->addChild(itemChild);
        }
    }
    treeWidget->show();

    connect(treeWidget, &QTreeWidget::itemDoubleClicked, this, [=](QTreeWidgetItem *item, int column){
        QString str = item->text(0);
        if("Vertical Layout" == str){
            if(nullptr == m_mapRightWidget["Vertical Layout"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("垂直布局");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:垂直布局
                    //Vertical Layout 垂直布局
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,100);
                    dialog->setWindowTitle("垂直布局示例");
                    QLabel* label = new QLabel("控件1", dialog);
                    QLabel* label_2 = new QLabel("控件2", dialog);
                    QLabel* label_3 = new QLabel("控件3", dialog);
                    label->setStyleSheet("background-color: red;");
                    label_2->setStyleSheet("background-color: yellow;");
                    label_3->setStyleSheet("background-color: blue;");
                    QVBoxLayout* vbox = new QVBoxLayout(dialog);
                    vbox->addWidget(label);
                    vbox->addWidget(label_2);
                    vbox->addWidget(label_3);
                    dialog->setLayout(vbox);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:垂直布局
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Vertical Layout"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Vertical Layout"]);

        }else if("Horizontal Layout" == str){
            if(nullptr == m_mapRightWidget["Horizontal Layout"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("水平布局");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:水平布局
                    //Horizontal Layout 水平布局
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("水平布局示例");
                    QLabel* label = new QLabel("控件1", dialog);
                    QLabel* label_2 = new QLabel("控件2", dialog);
                    QLabel* label_3 = new QLabel("控件3", dialog);
                    label->setStyleSheet("background-color: red;");
                    label_2->setStyleSheet("background-color: yellow;");
                    label_3->setStyleSheet("background-color: blue;");
                    QHBoxLayout* hbox = new QHBoxLayout(dialog);
                    hbox->addWidget(label);
                    hbox->addWidget(label_2);
                    hbox->addWidget(label_3);
                    dialog->setLayout(hbox);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:水平布局
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Horizontal Layout"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Horizontal Layout"]);
        }else if("Grid Layout" == str){
            if(nullptr == m_mapRightWidget["Grid Layout"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("网格布局");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:网格布局
                    //Grid Layout 网格布局
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,100);
                    dialog->setWindowTitle("网格布局示例");
                    QLabel* label = new QLabel("控件1", dialog);
                    QLabel* label_2 = new QLabel("控件2", dialog);
                    QLabel* label_3 = new QLabel("控件3", dialog);
                    QLabel* label_4 = new QLabel("控件4", dialog);
                    label->setStyleSheet("background-color: red;");
                    label_2->setStyleSheet("background-color: yellow;");
                    label_3->setStyleSheet("background-color: blue;");
                    label_4->setStyleSheet("background-color: black;");
                    QGridLayout* grid = new QGridLayout(dialog);
                    grid->addWidget(label, 0 ,0);
                    grid->addWidget(label_2, 0, 1);
                    grid->addWidget(label_3, 1, 0);
                    grid->addWidget(label_4, 1, 1);
                    dialog->setLayout(grid);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:网格布局
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Grid Layout"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Grid Layout"]);
        }else if("Form Layout" == str){
            if(nullptr == m_mapRightWidget["Form Layout"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("表格布局示例");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:表格布局
                    //Grid Layout 表格布局 少添加一个Label
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,100);
                    dialog->setWindowTitle("表格布局");
                    QLineEdit* line = new QLineEdit(dialog);
                    QLineEdit* line_1 = new QLineEdit(dialog);
                    QLineEdit* line_2 = new QLineEdit(dialog);
                    QFormLayout* layout= new QFormLayout(dialog);
                    layout->addRow("text:", line);
                    layout->addRow("text_1:", line_1);
                    layout->addRow("text_2:", line_2);
                    dialog->setLayout(layout);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:表格布局
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Form Layout"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Form Layout"]);
        }else if("Horizontal Spacer" == str){
            if(nullptr == m_mapRightWidget["Horizontal Spacer"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("水平弹簧");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:水平弹簧
                    //Horizontal Spacer 水平弹簧
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("水平弹簧示例");
                    QLabel* label = new QLabel("控件1", dialog);
                    QLabel* label_2 = new QLabel("控件2", dialog);
                    QLabel* label_3 = new QLabel("控件3", dialog);
                    label->setStyleSheet("background-color: red;");
                    label_2->setStyleSheet("background-color: yellow;");
                    label_3->setStyleSheet("background-color: blue;");
                    QHBoxLayout* hbox = new QHBoxLayout(dialog);
                    hbox->addWidget(label);
                    hbox->addWidget(label_2);
                    hbox->addStretch();//弹簧
                    hbox->addWidget(label_3);
                    dialog->setLayout(hbox);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:水平弹簧
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Horizontal Spacer"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Horizontal Spacer"]);
        }else if("Vertical Spacer" == str){
            if(nullptr == m_mapRightWidget["Vertical Spacer"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("垂直弹簧");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:垂直弹簧
                    //Vertical Spacer 垂直弹簧
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("垂直弹簧示例");
                    QLabel* label = new QLabel("控件1", dialog);
                    QLabel* label_2 = new QLabel("控件2", dialog);
                    QLabel* label_3 = new QLabel("控件3", dialog);
                    label->setStyleSheet("background-color: red;");
                    label_2->setStyleSheet("background-color: yellow;");
                    label_3->setStyleSheet("background-color: blue;");
                    QVBoxLayout* vbox = new QVBoxLayout(dialog);
                    vbox->addWidget(label);
                    vbox->addWidget(label_2);
                    vbox->addStretch();//弹簧
                    vbox->addWidget(label_3);
                    dialog->setLayout(vbox);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:垂直弹簧
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Vertical Spacer"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Vertical Spacer"]);
        }else if("Push Button" == str){
            if(nullptr == m_mapRightWidget["Push Button"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("按钮");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:按钮
                    //Push Button 按钮
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("按钮示例");
                    QPushButton* btn = new QPushButton("按钮", dialog);
                    connect(btn, &QPushButton::clicked, this, [=](){
                        QMessageBox::information(nullptr, "按钮弹窗", "您点击了此按钮!");
                    });
                    dialog->exec();
                    dialog->deleteLater();
                    //key:按钮
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Push Button"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Push Button"]);
        }else if("Tool Button" == str){
            if(nullptr == m_mapRightWidget["Tool Button"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("工具按钮");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:工具按钮
                    //Tool Button 工具按钮
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("工具按钮示例");
                    QToolButton* btn = new QToolButton(dialog);
                    QIcon icon = QApplication::style()->standardIcon((enum QStyle::StandardPixmap)0);//系统图标
                    btn->setIcon(icon);
                    btn->setArrowType(Qt::LeftArrow);
                    btn->setText("Tool Button");
                    //btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//  文本位于图标之下
                    btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);// 文本位于图标之右
                    //btn->setToolButtonStyle(Qt::ToolButtonIconOnly);// 只显示图标
                    connect(btn, &QPushButton::clicked, this, [=](){
                        QMessageBox::information(nullptr, "按钮弹窗", "您点击了此按钮!");
                    });
                    dialog->exec();
                    dialog->deleteLater();
                    //key:工具按钮
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Tool Button"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Tool Button"]);
        }else if("Radio Button" == str){
            if(nullptr == m_mapRightWidget["Radio Button"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("单选按钮");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:单选按钮
                    //Radio Button 单选按钮
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("单选按钮示例");
                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);
                    QRadioButton* radioBtn = new QRadioButton;
                    QRadioButton* radioBtn_1 = new QRadioButton;
                    vbox->addWidget(radioBtn);
                    vbox->addWidget(radioBtn_1);
                    //将两个按钮加入组后,只有一个可选,即互斥
                    QButtonGroup* group = new QButtonGroup(dialog);
                    group->addButton(radioBtn);
                    group->addButton(radioBtn_1);

                    connect(radioBtn, &QRadioButton::toggled, this, [=](bool check){
                        if(check)
                            radioBtn->setText("已选择");
                        else
                            radioBtn->setText("未选择");
                    });
                    connect(radioBtn_1, &QRadioButton::toggled, this, [=](bool check){
                        if(check)
                            radioBtn_1->setText("已选择");
                        else
                            radioBtn_1->setText("未选择");
                    });
                    dialog->exec();
                    dialog->deleteLater();
                    //key:单选按钮
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Radio Button"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Radio Button"]);
        }else if("Check box" == str){
            if(nullptr == m_mapRightWidget["Check box"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("多选框");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:多选框
                    //Check box 多选框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("多选框示例");
                    QHBoxLayout* hbox = new QHBoxLayout;
                    dialog->setLayout(hbox);
                    QCheckBox* checkBox = new QCheckBox;
                    QCheckBox* checkBox_1 = new QCheckBox;
                    QCheckBox* checkBox_2 = new QCheckBox;
                    hbox->addWidget(checkBox);
                    hbox->addWidget(checkBox_1);
                    hbox->addWidget(checkBox_2);
                    connect(checkBox, &QCheckBox::toggled, this, [=](bool check){
                        if(check)
                            checkBox->setText("已选择");
                        else
                            checkBox->setText("未选择");
                    });
                    connect(checkBox_1, &QCheckBox::toggled, this, [=](bool check){
                        if(check)
                            checkBox_1->setText("已选择");
                        else
                            checkBox_1->setText("未选择");
                    });
                    connect(checkBox_2, &QCheckBox::toggled, this, [=](bool check){
                        if(check)
                            checkBox_2->setText("已选择");
                        else
                            checkBox_2->setText("未选择");
                    });
                    dialog->exec();
                    dialog->deleteLater();
                    //key:多选框
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Check box"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Check box"]);
        }else if("Command Link Button" == str){
            if(nullptr == m_mapRightWidget["Command Link Button"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("命令连接按钮");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:命令连接按钮
                    //Command Link Button 命令连接按钮
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("命令连接按钮示例");
                    QCommandLinkButton* btn = new QCommandLinkButton("命令连接按钮", "Command Link Button", dialog);
                    //btn->setText("命令连接按钮");
                    //btn->setDescription("Command Link Button");
                    //QIcon icon = QApplication::style()->standardIcon((enum QStyle::StandardPixmap)0);//系统图标
                    //btn->setIcon(icon);//也可设置图标
                    connect(btn, &QCommandLinkButton::clicked, this, [=](){
                        QMessageBox::information(nullptr, "按钮弹窗", "您点击了此按钮!");
                    });
                    dialog->exec();
                    dialog->deleteLater();
                    //key:命令连接按钮
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Command Link Button"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Command Link Button"]);
        }else if("Dialog Button Box" == str){
            if(nullptr == m_mapRightWidget["Dialog Button Box"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("对话框按钮");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:对话框按钮
                    //Dialog Button Box 对话框按钮
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("对话框按钮示例");
                    //QDialogButtonBox* box = new QDialogButtonBox(QDialogButtonBox::SaveAll
                    //                                             |QDialogButtonBox::Ok,
                    //                                            Qt::Horizontal,
                    //                                           dialog);
                    QDialogButtonBox* box = new QDialogButtonBox(Qt::Horizontal,dialog);

                    QPushButton* btn = new QPushButton("确定");
                    QPushButton* btn_1 = new QPushButton("取消");
                    box->addButton(QDialogButtonBox::SaveAll);
                    box->addButton(btn, QDialogButtonBox::ActionRole);
                    box->addButton(btn_1, QDialogButtonBox::ActionRole);
                    connect(box, &QDialogButtonBox::clicked, this, [=](QAbstractButton *button){
                        QMessageBox::information(nullptr, "按钮弹窗", "您点击了:" + button->text());
                    });
                    dialog->exec();
                    dialog->deleteLater();
                    //key:对话框按钮
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Dialog Button Box"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Dialog Button Box"]);
        }else if("List View" == str){
            if(nullptr == m_mapRightWidget["List View"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("列表视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:列表视图
                    //List View 列表视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("列表视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QListView* listView =new QListView;
                    vbox->addWidget(listView);
                    dialog->setLayout(vbox);
                    QStringList strList;
                    for (int i=0;i<10;i++) {
                        strList.append(QString("listItem%1").arg(i));
                    }

                    QStandardItemModel* mode =new QStandardItemModel(listView);
                    int nCount = strList.size();
                    for(int i = 0; i < nCount; i++)
                    {
                           QString string = static_cast<QString>(strList.at(i));
                           QStandardItem *item = new QStandardItem(string);
                           item->setData(i*2, Qt::UserRole);
                           mode->appendRow(item);
                    }
                    listView->setModel(mode);

                    //点击事件
                    connect(listView,&QListView::pressed, this, [=](const QModelIndex &index){
                        if(qApp->mouseButtons() == Qt::RightButton)//右键菜单 clicked 右键点击时不会触发
                        {
                            QMenu menu;
                            menu.addAction(mode->itemFromIndex(index)->text());
                            menu.exec(QCursor::pos());
                        }
                    });
                    connect(listView,&QListView::doubleClicked, this, [=](const QModelIndex &index){
                        QStandardItem *item = mode->itemFromIndex(index);
                        qDebug()<<"doubleClicked data:"<< " "<<item->data(Qt::UserRole).value<int>();
                        QMessageBox::information(nullptr,"提示", QString("doubleClicked %1 data:%2").arg(item->text()).arg(item->data(Qt::UserRole).value<int>()));
                    });
                    listView->show();
                    dialog->exec();
                    dialog->deleteLater();
                    //key:列表视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["List View"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["List View"]);
        }else if("Tree View" == str){
            if(nullptr == m_mapRightWidget["Tree View"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("树视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:树视图
                    //Tree View 树视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("树视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QTreeView* treeView =new QTreeView;
                    vbox->addWidget(treeView);
                    dialog->setLayout(vbox);

                    treeView->setHeaderHidden(true);//表头隐藏
                    QStringList strList;
                    for (int i=0;i<10;i++) {
                        strList.append(QString("listItem%1").arg(i));
                    }

                    QStandardItemModel* mode =new QStandardItemModel(treeView);
                    int nCount = strList.size();
                    for(int i = 0; i < nCount; i++)
                    {
                        QString string = static_cast<QString>(strList.at(i));
                        QStandardItem *item = new QStandardItem(string);
                        item->setData(i*2, Qt::UserRole);
                        mode->setItem(i,0,item);
                        for(int j=0; j<2; j++){
                           QString string = static_cast<QString>(QString("listItemChild%1").arg(j));
                           QStandardItem *itemChild = new QStandardItem(string);
                           if(0==i){
                               item->setCheckable(true);//设置可选
                               itemChild->setCheckable(true);
                           }
                           itemChild->setData(j*2, Qt::UserRole);
                           mode->item(i,0)->setChild(j,0,itemChild);
                        }
                    }
                    treeView->setModel(mode);
                    connect(treeView,&QTreeView::pressed, this, [=](const QModelIndex &index){
                        if(qApp->mouseButtons() == Qt::RightButton)//右键菜单
                        {
                            QMenu menu;
                            menu.addAction(mode->itemFromIndex(index)->text());
                            menu.exec(QCursor::pos());
                        }
                    });
                    connect(treeView,&QTreeView::doubleClicked, this, [=](const QModelIndex &index){
                        QStandardItem *item = mode->itemFromIndex(index);
                        qDebug()<<"doubleClicked data:"<< " "<<item->data(Qt::UserRole).value<int>();
                        QMessageBox::information(nullptr,"提示", QString("doubleClicked %1 data:%2").arg(item->text()).arg(item->data(Qt::UserRole).value<int>()));
                    });
                    treeView->show();

                    dialog->exec();
                    dialog->deleteLater();
                    //key:树视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Tree View"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Tree View"]);
        }else if("Table View" == str){
            if(nullptr == m_mapRightWidget["Table View"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("表格视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:表格视图
                    //Table View 表格视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("表格视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QTableView* tableView =new QTableView;
                    vbox->addWidget(tableView);
                    dialog->setLayout(vbox);

                    //tableView->horizontalHeader()->setVisible(false);//隐藏表头
                    //tableView->verticalHeader()->setVisible(false);//隐藏序号
                    QStandardItemModel* mode =new QStandardItemModel(tableView);
                    QStringList headList;
                    headList<<"title1"<<"title2"<<"title3";
                    mode->setHorizontalHeaderLabels(headList);//表头
                    for(int i = 0; i < 10; i++)
                    {
                        for (int j=0; j<3; j++) {
                            QString string = static_cast<QString>(QString("listItem%1x%2").arg(i).arg(j));
                            QStandardItem *item = new QStandardItem(string);
                            item->setData(i*2, Qt::UserRole);
                            mode->setItem(i,j,item);
                            if(0 == i)
                                item->setCheckable(true);//设置选择框
                        }
                    }
                    tableView->setModel(mode);
                    connect(tableView,&QTableView::pressed, this, [=](const QModelIndex &index){
                        if(qApp->mouseButtons() == Qt::RightButton)//右键菜单
                        {
                            QMenu menu;
                            menu.addAction(mode->itemFromIndex(index)->text());
                            menu.exec(QCursor::pos());
                        }
                    });
                    connect(tableView,&QTableView::doubleClicked, this, [=](const QModelIndex &index){
                        QStandardItem *item = mode->itemFromIndex(index);
                        qDebug()<<"doubleClicked data:"<< " "<<item->data(Qt::UserRole).value<int>();
                        QMessageBox::information(nullptr,"提示", QString("doubleClicked %1 data:%2").arg(item->text()).arg(item->data(Qt::UserRole).value<int>()));
                    });
                    tableView->show();

                    dialog->exec();
                    dialog->deleteLater();
                    //key:表格视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Table View"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Table View"]);
        }else if("Column View" == str){
            if(nullptr == m_mapRightWidget["Column View"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("列模式表格视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:列模式表格视图
                    //Column View 列模式表格视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("列模式表格视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QColumnView* colunmView =new QColumnView;
                    vbox->addWidget(colunmView);
                    dialog->setLayout(vbox);

                    QStandardItemModel* mode =new QStandardItemModel(colunmView);
                    for(int i = 0; i < 10; i++)
                    {
                        QStandardItem *item = new QStandardItem(QString("listItem%1").arg(i));
                        item->setData(i*2, Qt::UserRole);
                        mode->appendRow(item);

                        for (int j=0; j<3; j++) {
                            QStandardItem *itemChild = new QStandardItem(QString("listItem%1*%2").arg(i).arg(j));
                            itemChild->setData(j*2, Qt::UserRole);
                            item->appendRow(itemChild);

                            for (int n=0; n<3; n++) {
                                QStandardItem *itemChild_2 = new QStandardItem(QString("listItem%1*%2*%3")
                                                                               .arg(i).arg(j).arg(n));
                                itemChild_2->setData(j*2, Qt::UserRole);
                                itemChild->appendRow(itemChild_2);
                            }
                        }

                    }
                    colunmView->setModel(mode);
                    connect(colunmView,&QColumnView::pressed, this, [=](const QModelIndex &index){
                        if(qApp->mouseButtons() == Qt::RightButton)//右键菜单
                        {
                            QMenu menu;
                            menu.addAction(mode->itemFromIndex(index)->text());
                            menu.exec(QCursor::pos());
                        }
                    });
                    connect(colunmView,&QColumnView::doubleClicked, this, [=](const QModelIndex &index){
                        QStandardItem *item = mode->itemFromIndex(index);
                        qDebug()<<"doubleClicked data:"<< " "<<item->data(Qt::UserRole).value<int>();
                        QMessageBox::information(nullptr,"提示", QString("doubleClicked %1 data:%2").arg(item->text()).arg(item->data(Qt::UserRole).value<int>()));
                    });
                    colunmView->show();

                    dialog->exec();
                    dialog->deleteLater();
                    //key:列模式表格视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Column View"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Column View"]);
        }else if("Undo View" == str){
            if(nullptr == m_mapRightWidget["Undo View"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("撤销视图","/mainwindow.h");
                widget->SetText("撤销视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:撤销视图
                    //Undo View 撤销视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("撤销视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QWidget* widget = new QWidget;
                    QWidget* widget_2 = new QWidget;
                    widget_2->setFixedWidth(500);
                    widget_2->setStyleSheet("background-color:rgb(255,255,255);");
                    vbox->addWidget(widget);
                    dialog->setLayout(vbox);

                    QUndoStack* m_undoStack = new QUndoStack(widget);//存放操作的栈
                    QUndoView* m_undoView = new QUndoView(m_undoStack);//右面显示栈内容的view(不setText就是空的)
                    QAction* m_undoAction = m_undoStack->createUndoAction(widget,"Undo");
                    m_undoAction->setShortcut(QKeySequence::Undo);
                    QAction* m_redoAction = m_undoStack->createRedoAction(widget,"Redo");
                    m_redoAction->setShortcut(QKeySequence::Redo);
                    widget->addAction(m_undoAction);
                    widget->addAction(m_redoAction);

                    QPushButton* m_addItemBtn = new QPushButton();
                    QLineEdit* m_lineEdit = new QLineEdit;
                    m_addItemBtn->setText("add Item");

                    QVBoxLayout *vLayout = new QVBoxLayout();
                    QHBoxLayout *pHLayout = new QHBoxLayout();
                    vLayout->addWidget(m_addItemBtn);
                    vLayout->addWidget(m_lineEdit);
                    vLayout->addWidget(widget_2);
                    pHLayout->addLayout(vLayout);
                    pHLayout->addWidget(m_undoView);
                    widget->setLayout(pHLayout);
                    widget->resize(500,400);

                    connect(m_addItemBtn,&QPushButton::clicked,this,[=](){
                        Mybtn* btn = new Mybtn(m_lineEdit->text(), widget_2);
                        btn->show();
                        QUndoCommand* add = new addCommand(btn);
                        m_undoStack->push(add);//入栈操作 会自动调用 addCommand 的 redo
                        connect(btn,&Mybtn::sigMove, this, [=](Mybtn* btn, QPoint pos){
                            m_undoStack->push(new moveCommand(btn, pos));//入栈操作
                        });
                    });


                    dialog->exec();
                    dialog->deleteLater();
                    //key:撤销视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Undo View"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Undo View"]);
        }else if("List Widget" == str){
            if(nullptr == m_mapRightWidget["List Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("列表界面视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:列表界面视图
                    //List Widget 列表界面视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("列表界面视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QListWidget* listWidget = new QListWidget;
                    vbox->addWidget(listWidget);
                    dialog->setLayout(vbox);


                    for (int i=0; i<5; i++) {
                        QListWidgetItem* item = new QListWidgetItem(QString::number(i));
                        listWidget->insertItem(i, item);

                    }
                    for (int i=5; i<10; i++) {
                        QListWidgetItem* item = new QListWidgetItem;
                        listWidget->insertItem(i, item);

                        QProgressBar* bar = new QProgressBar;
                        bar->setRange(0,100);
                        bar->setValue(i*10);
                        bar->setAlignment(Qt::AlignCenter);

                        listWidget->setItemWidget(item,bar);
                    }

                    for (int i=10; i<15; i++) {
                        QListWidgetItem* item = new QListWidgetItem;
                        listWidget->insertItem(i, item);

                        QLineEdit* edit = new QLineEdit;
                        listWidget->setItemWidget(item,edit);
                    }
                    listWidget->show();

                    //点击事件
                    connect(listWidget,&QListWidget::itemPressed, this, [=](QListWidgetItem *item){
                        if(qApp->mouseButtons() == Qt::RightButton)//右键菜单 clicked 右键点击时不会触发
                        {
                            QMenu menu;
                            menu.addAction(item->text());
                            menu.exec(QCursor::pos());
                        }
                    });
                    connect(listWidget,&QListWidget::itemDoubleClicked, this, [=](QListWidgetItem *item){
                        QMessageBox::information(nullptr, "提示", "doubleClicked row:"+ QString::number(listWidget->row(item)));
                     });


                    dialog->exec();
                    dialog->deleteLater();
                    //key:列表界面视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["List Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["List Widget"]);
        }else if("Tree Widget" == str){
            if(nullptr == m_mapRightWidget["Tree Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("树界面视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:树界面视图
                    //Tree Widget 树界面视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("树界面视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QTreeWidget* treeWidget = new QTreeWidget;
                    vbox->addWidget(treeWidget);
                    dialog->setLayout(vbox);


                    treeWidget->setColumnCount(3);
                    treeWidget->headerItem()->setHidden(true);//隐藏表头
                    //点击事件
                    connect(treeWidget,&QTreeWidget::itemPressed, this, [=](QTreeWidgetItem *item, int column){
                        if(qApp->mouseButtons() == Qt::RightButton)//右键菜单 clicked 右键点击时不会触发
                        {
                            QMenu menu;
                            menu.addAction(item->text(column));
                            menu.exec(QCursor::pos());
                        }
                    });
                    connect(treeWidget,&QTreeWidget::itemDoubleClicked, this, [=](QTreeWidgetItem *item, int column){
                        QMessageBox::information(nullptr, "提示", "doubleClicked row:"+ item->text(0));
                     });


                    for (int i=0; i<5; i++) {
                        QTreeWidgetItem* item = new QTreeWidgetItem;
                        treeWidget->insertTopLevelItem(i,item);
                        for (int n=0; n<3; n++) {
                            item->setText(n, QString::number(i+n));
                        }
                        for (int j=0; j<5; j++) {
                            QTreeWidgetItem* itemChlid = new QTreeWidgetItem;
                            item->addChild(itemChlid);
                            for (int n=0; n<3; n++) {
                                itemChlid->setText(n, QString::number(j+n));
                            }

                            QProgressBar* bar = new QProgressBar;
                            bar->setRange(0,100);
                            bar->setValue(i*10);
                            bar->setAlignment(Qt::AlignCenter);

                            treeWidget->setItemWidget(itemChlid, 0, bar);
                        }

                    }
                    treeWidget->show();


                    dialog->exec();
                    dialog->deleteLater();
                    //key:树界面视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Tree Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Tree Widget"]);
        }else if("Table Widget" == str){
            if(nullptr == m_mapRightWidget["Table Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("表格界面视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:表格界面视图
                    //Table Widget 表格界面视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("表格界面视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QTableWidget* tableWidget = new QTableWidget;
                    vbox->addWidget(tableWidget);
                    dialog->setLayout(vbox);

                    tableWidget->setColumnCount(3);
                    tableWidget->horizontalHeader()->setVisible(false);//隐藏表头
                    tableWidget->verticalHeader()->setVisible(false);//隐藏行号
                    //点击事件
                    connect(tableWidget,&QTableWidget::itemPressed, this, [=](QTableWidgetItem *item){
                        if(qApp->mouseButtons() == Qt::RightButton)//右键菜单 clicked 右键点击时不会触发
                        {
                            QMenu menu;
                            menu.addAction(item->text());
                            menu.exec(QCursor::pos());
                        }
                    });
                    connect(tableWidget,&QTableWidget::itemDoubleClicked, this, [=](QTableWidgetItem *item){
                        QMessageBox::information(nullptr, "提示", "doubleClicked row:"+ item->text());
                     });

                    tableWidget->setRowCount(10);
                    for (int i=0; i<5; i++) {
                        for (int j=0; j<tableWidget->columnCount(); j++) {
                            QTableWidgetItem* item = new QTableWidgetItem(QString("%1*%2").arg(i).arg(j));
                            tableWidget->setItem(i,j,item);
                        }
                    }
                    for (int i=5; i<10; i++) {
                        for (int j=0; j<tableWidget->columnCount(); j++) {
                            QTableWidgetItem* item = new QTableWidgetItem(QString("%1*%2").arg(i).arg(j));
                            tableWidget->setItem(i,j,item);

                            QProgressBar* bar = new QProgressBar;
                            bar->setRange(0,100);
                            bar->setValue(i*10);
                            bar->setAlignment(Qt::AlignCenter);

                            tableWidget->setCellWidget(i,j,bar);
                        }
                    }
                    tableWidget->show();

                    dialog->exec();
                    dialog->deleteLater();
                    //key:表格界面视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Table Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Table Widget"]);
        }else if("Group Box" == str){
            if(nullptr == m_mapRightWidget["Group Box"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("组框视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:组框视图
                    //Group Box 组框视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("组框视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    widget->setLayout(vbox);
                    for (int i=0; i<2; i++) {
                        QGroupBox* groupBox = new QGroupBox("组框标题"+QString::number(i));
                        QGridLayout* grid = new QGridLayout;

                        QCheckBox* checkBox = new QCheckBox("checkBox");
                        QCheckBox* checkBox2 = new QCheckBox("checkBox2");
                        QCheckBox* checkBox3 = new QCheckBox("checkBox3");

                        QRadioButton* radioBtn = new QRadioButton("radioBtn");
                        QRadioButton* radioBtn2 = new QRadioButton("radioBtn2");
                        QRadioButton* radioBtn3 = new QRadioButton("radioBtn3");//radio会互斥

                        grid->addWidget(checkBox, 0, 0);
                        grid->addWidget(checkBox2, 0, 1);
                        grid->addWidget(checkBox3, 0, 2);

                        grid->addWidget(radioBtn, 1, 0);
                        grid->addWidget(radioBtn2, 1, 1);
                        grid->addWidget(radioBtn3, 1, 2);

                        groupBox->setLayout(grid);
                        vbox->addWidget(groupBox);
                    }

                    vbox->addStretch();

                    dialog->exec();
                    dialog->deleteLater();
                    //key:组框视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Group Box"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Group Box"]);
        }else if("Scroll Area" == str){
            if(nullptr == m_mapRightWidget["Scroll Area"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("滚动视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:滚动视图
                    //Scroll Area 滚动视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("滚动视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QScrollArea* scroll = new QScrollArea;
                    vbox->addWidget(scroll);
                    dialog->setLayout(vbox);

                    QWidget* widget = new QWidget;
                    QVBoxLayout* vbox2 = new QVBoxLayout;
                    widget->setLayout(vbox2);
                    for (int i=0; i<30; i++) {
                        QLabel* label = new QLabel("label" + QString::number(i));
                        label->setFixedHeight(50);
                        vbox2->addWidget(label);
                    }
                    scroll->setWidget(widget);//这一步要在后面,即 widget添加布局控件后 再将其widget加入scroll中

                    dialog->exec();
                    dialog->deleteLater();
                    //key:滚动视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Scroll Area"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Scroll Area"]);
        }else if("Tool Box" == str){
            if(nullptr == m_mapRightWidget["Tool Box"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("抽屉视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:抽屉视图
                    //Tool Box 抽屉视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("抽屉视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QToolBox* toolBox = new QToolBox;
                    vbox->addWidget(toolBox);
                    dialog->setLayout(vbox);

                    for (int i=0; i<3; i++) {
                          QWidget* widget = new QWidget;
                          QVBoxLayout* layout = new QVBoxLayout(widget);
                          QLabel* label= new QLabel("label" + QString::number(i));
                          QLineEdit* lineEdit = new QLineEdit;
                          QCheckBox* box = new QCheckBox("box" + QString::number(i));
                          layout->addWidget(label);
                          layout->addWidget(lineEdit);
                          layout->addWidget(box);
                          toolBox->addItem(widget, "toolBtn" + QString::number(i));
                    }


                    dialog->exec();
                    dialog->deleteLater();
                    //key:抽屉视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Tool Box"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Tool Box"]);
        }else if("Tab Widget" == str){
            if(nullptr == m_mapRightWidget["Tab Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("选项界面视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:选项界面视图
                    //Tab Widget 选项界面视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("选项界面视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QTabWidget* tabWidget = new QTabWidget;
                    vbox->addWidget(tabWidget);
                    dialog->setLayout(vbox);

                    for (int i=0; i<3; i++) {
                        tabWidget->addTab(new QWidget, "tabTitle"+QString::number(i));
                    }

                    dialog->exec();
                    dialog->deleteLater();
                    //key:选项界面视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Tab Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Tab Widget"]);
        }else if("Stacked Widget" == str){
            if(nullptr == m_mapRightWidget["Stacked Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("堆叠界面视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:堆叠界面视图
                    //Stacked Widget 堆叠界面视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("堆叠界面视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QPushButton* btn = new QPushButton("next");
                    QStackedWidget* stackWidget = new QStackedWidget;
                    vbox->addWidget(btn);
                    vbox->addWidget(stackWidget);

                    for (int i=0; i<3; i++) {
                        QLabel* label = new QLabel("stackWidget"+QString::number(i));
                        stackWidget->addWidget(label);
                    }
                    stackWidget->setCurrentIndex(2);

                    int cnt =0;
                    connect(btn,&QPushButton::clicked, this, [=]()mutable{
                        if(cnt++ > stackWidget->count())
                            cnt = 0;
                        stackWidget->setCurrentIndex(cnt);
                    });

                    dialog->exec();
                    dialog->deleteLater();
                    //key:堆叠界面视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Stacked Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Stacked Widget"]);
        }else if("Frame" == str){
            if(nullptr == m_mapRightWidget["Frame"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("框架界面视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:框架界面视图
                    //Frame 框架界面视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("框架界面视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QFrame* frame = new QFrame;
                    frame->setFrameShape(QFrame::Box);
                    vbox->addWidget(frame);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:框架界面视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Frame"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Frame"]);
        }else if("Widget" == str){
            if(nullptr == m_mapRightWidget["Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("界面视图");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:界面视图
                    //Widget 界面视图
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("界面视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QWidget* widget = new QWidget;
                    widget->setStyleSheet("background-color: red;");
                    vbox->addWidget(widget);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:界面视图
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Widget"]);
        }else if("MDI Area" == str){
            if(nullptr == m_mapRightWidget["MDI Area"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("MDI多窗体组件");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:MDI多窗体组件
                    //MDI Area MDI多窗体组件 主要用于设计多文档界面应用程序
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("MDI多窗体组件示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    QHBoxLayout* hbox = new QHBoxLayout;
                    dialog->setLayout(vbox);

                    QPushButton* btn = new QPushButton("Open");
                    QMdiArea* mdi = new QMdiArea;
                    mdi->setViewMode(QMdiArea::SubWindowView); //子窗口模式
                    //mdi->setViewMode(QMdiArea::TabbedView ); //table窗口模式

                    hbox->addWidget(btn);
                    hbox->addStretch();
                    vbox->addLayout(hbox);
                    vbox->addWidget(mdi);

                    QTextBrowser* textBrowser = new QTextBrowser;
                    textBrowser->setWindowTitle("新文件1.txt");
                    QMdiSubWindow *sub = mdi->addSubWindow(textBrowser);
                    mdi->setActiveSubWindow(sub);
                    connect(btn, &QPushButton::clicked, this ,[=]()mutable{
                        QString filePath = QFileDialog
                                ::getOpenFileName(nullptr,"选择打开的文件","/");
                        QFile file(filePath);
                        if(file.open(QIODevice::ReadOnly))
                        {
                            QString str = file.readAll();
                            QTextBrowser* textBrowser = new QTextBrowser;
                            textBrowser->setText(str);
                            textBrowser->setWindowTitle(filePath);
                            mdi->addSubWindow(textBrowser);
                            textBrowser->show();
                            file.close();
                        }

                    });

                    dialog->exec();
                    dialog->deleteLater();
                    //key:MDI多窗体组件
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["MDI Area"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["MDI Area"]);
        }else if("Dock Widget" == str){
            if(nullptr == m_mapRightWidget["Dock Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("停靠窗口");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:停靠窗口
                    //Dock Widget 停靠窗口
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("停靠窗口示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QMainWindow* mainWin = new QMainWindow;
                    vbox->addWidget(mainWin);
                    QMenuBar* menuBar = new QMenuBar;
                    QMenu* menu = new QMenu("help");
                    QAction* act = new QAction("about");
                    QAction* act_2 = new QAction("edit");
                    act->setCheckable(true);
                    act_2->setCheckable(true);
                    menu->addAction(act);
                    menu->addAction(act_2);
                    menuBar->addMenu(menu);
                    mainWin->setMenuBar(menuBar);
                    QDockWidget* dockWidget = new QDockWidget;
                    QDockWidget* dockWidget_2 = new QDockWidget;
                    QLabel* label = new QLabel("about");
                    QLineEdit* lineEdit = new QLineEdit;
                    dockWidget->setWidget(label);
                    dockWidget_2->setWidget(lineEdit);
                    mainWin->addDockWidget(Qt::TopDockWidgetArea, dockWidget);
                    mainWin->addDockWidget(Qt::TopDockWidgetArea, dockWidget_2);
                    dockWidget->setWindowTitle("about");
                    dockWidget_2->setWindowTitle("edit");
                    dockWidget->hide();
                    dockWidget_2->hide();
                    connect(menuBar,&QMenuBar::triggered,this,[=](QAction* act){
                        if(act->text() == "about"){
                            if(act->isChecked()){
                                dockWidget->raise();
                                dockWidget->show();
                            }
                            else
                                dockWidget->hide();
                        }else if(act->text() == "edit"){
                            if(act->isChecked()){
                                dockWidget->raise();
                                dockWidget_2->show();
                            }
                            else
                                dockWidget_2->hide();
                        }
                    });

                    dialog->exec();
                    dialog->deleteLater();
                    //key:停靠窗口
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Dock Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Dock Widget"]);
        }else if("QAxWidget" == str){
            if(nullptr == m_mapRightWidget["QAxWidget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("QAxWidget");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:QAxWidget
                    //QAxWidget 是一个包装ActiveX控件的QWidget 打开word
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("QAxWidget示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QHBoxLayout* hbox  = new QHBoxLayout;
                    QPushButton* btn = new QPushButton("open");
                    hbox->addWidget(btn);
                    hbox->addStretch();

                    vbox->addLayout(hbox);
                    widget->setLayout(vbox);
                    QAxWidget* axWidget =  new QAxWidget;
                    vbox->addWidget(axWidget);

                    connect(btn,&QPushButton::clicked,this,[=](){
                        QString filePath = QFileDialog::getOpenFileName(nullptr,"选择文件","/");
                        axWidget->setControl(filePath);
                    });

                    dialog->exec();
                    dialog->deleteLater();
                    //key:QAxWidget
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["QAxWidget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["QAxWidget"]);
        }else if("Combo Box" == str){
            if(nullptr == m_mapRightWidget["Combo Box"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Combo Box");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Combo Box
                    //Combo Box 下拉选择框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("下拉选择框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);
                    QComboBox* box = new QComboBox;
                    vbox->addWidget(box);
                    for (int i=0; i<6; i++) {
                        box->addItem("box"+QString::number(i));
                    }
                    connect(box,&QComboBox::textActivated,this,[=](const QString str){
                        QMessageBox::information(nullptr,"提示","您选择了:"+str);
                    });

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Combo Box
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Combo Box"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Combo Box"]);
        }else if("Font Combo Box" == str){
            if(nullptr == m_mapRightWidget["Font Combo Box"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Font Combo Box");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Font Combo Box
                    //Font Combo Box 字体选择框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("字体选择框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);
                    QFontComboBox* box = new QFontComboBox(this);
                    vbox->addWidget(box);

                    connect(box,&QFontComboBox::currentFontChanged,this,[=](const QFont &f){
                        QMessageBox::information(nullptr,"提示","您选择了:"+f.family());
                    });

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Font Combo Box
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Font Combo Box"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Font Combo Box"]);
        }else if("Line Edit" == str){
            if(nullptr == m_mapRightWidget["Line Edit"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Line Edit");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Line Edit
                    //Line Edit 单行编辑框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("单行编辑框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QLineEdit * edit = new QLineEdit;
                    vbox->addWidget(edit);
                    edit->setPlaceholderText("灰色提示语,输入时自动清空");
                    QString str = edit->text();//获取输入文本

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Line Edit
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Line Edit"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Line Edit"]);
        }else if("Text Edit" == str){
            if(nullptr == m_mapRightWidget["Text Edit"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Text Edit");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Text Edit
                    //Text Edit 多行编辑框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("多行编辑框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QTextEdit * edit = new QTextEdit(this);
                    QString str = edit->toPlainText();//获取输入文本
                    edit->setPlaceholderText("灰色提示语,输入时自动清空");

                    vbox->addWidget(edit);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Text Edit
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Text Edit"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Text Edit"]);
        }else if("Plain Text Edit" == str){
            if(nullptr == m_mapRightWidget["Plain Text Edit"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Plain Text Edit");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Plain Text Edit
                    //Plain Text Edit 多行编辑框 用法和Text Edit 差不多,但要多一些功能
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("多行编辑框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QHBoxLayout* hbox=  new QHBoxLayout;
                    QPushButton* btn = new QPushButton("放大");
                    QPushButton* btn_2 = new QPushButton("缩小");
                    hbox->addWidget(btn);
                    hbox->addWidget(btn_2);
                    hbox->addStretch();
                    QPlainTextEdit * edit = new QPlainTextEdit(this);
                    QString str = edit->toPlainText();//获取输入文本
                    edit->setPlaceholderText("灰色提示语,输入时自动清空");
                    connect(btn,&QPushButton::clicked,this,[=](){
                        edit->zoomOut(-10);
                    });
                    connect(btn_2,&QPushButton::clicked,this,[=](){
                        edit->zoomOut(10);
                    });

                    vbox->addLayout(hbox);
                    vbox->addWidget(edit);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Plain Text Edit
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Plain Text Edit"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Plain Text Edit"]);
        }else if("Spin Box" == str){
            if(nullptr == m_mapRightWidget["Spin Box"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Spin Box");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Spin Box
                    //Spin Box 轮选框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("轮选框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QSpinBox* spinBox = new QSpinBox(this);
                    spinBox->setPrefix ("¥");//设置前缀
                    spinBox->setSuffix("元");//设置后缀
                    spinBox->setValue(10000);
                    spinBox->setMinimum(-100);
                    spinBox->setMaximum(1000000);
                    spinBox->setSingleStep(100);
                //    prefix                            //数字显示的前缀
                //    suffix                            //数字显示的后缀
                //    minimum                           //数值范围的最小值
                //    maximum                           //数值范围的最大值
                //    singlestep                        //设置步长,即调整按钮单步改变值
                //    vlaue                             //当前显示值
                //    displayInegerBase                 //QSpinBox的特有属性,显示整数使用的进制
                //    decimals                          //QDoubleSpinBox的特有属性,显示数值小数的位数
                    //connect(spinBox, &QSpinBox::textChanged,this,[=](const QString & str){
                   //     QMessageBox::information(nullptr,"提示","当前选择:"+str);
                    //});

                    vbox->addWidget(spinBox);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Spin Box
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Spin Box"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Spin Box"]);
        }else if("Double Spin Box" == str){
            if(nullptr == m_mapRightWidget["Double Spin Box"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Double Spin Box");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Double Spin Box
                    //Double Spin Box 双精度轮选框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("双精度轮选框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QDoubleSpinBox* spinBox = new QDoubleSpinBox(this);
                    spinBox->setPrefix ("¥");//设置前缀
                    spinBox->setSuffix("元");//设置后缀
                    spinBox->setValue(10);
                    spinBox->setMinimum(-10);
                    spinBox->setMaximum(100);
                    spinBox->setSingleStep(0.01);
                //    prefix                            //数字显示的前缀
                //    suffix                            //数字显示的后缀
                //    minimum                           //数值范围的最小值
                //    maximum                           //数值范围的最大值
                //    singlestep                        //设置步长,即调整按钮单步改变值
                //    vlaue                             //当前显示值
                //    displayInegerBase                 //QSpinBox的特有属性,显示整数使用的进制
                //    decimals                          //QDoubleSpinBox的特有属性,显示数值小数的位数
                    //connect(spinBox, &QSpinBox::textChanged,this,[=](const QString & str){
                   //     QMessageBox::information(nullptr,"提示","当前选择:"+str);
                    //});
                    vbox->addWidget(spinBox);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Double Spin Box
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Double Spin Box"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Double Spin Box"]);
        }else if("Time Edit" == str){
            if(nullptr == m_mapRightWidget["Time Edit"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Time Edit");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Time Edit
                    //Time Edit 时间编辑框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("时间编辑框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QTimeEdit* timeEdit = new QTimeEdit(QTime::currentTime());
                    timeEdit->setDisplayFormat("AP:HH:MM:ss:zzz");//设置显示格式
                    /*
                     * h 显示小时(0-23)
                     * hh 显示两位数字的小时(00-23)
                     * m x显示分钟(0-59)
                     * mm 显示分钟(00-59)
                     * s 显示秒(0-59)
                     * ss 显示秒(00-59)
                     * z 显示秒(0-999)
                     * zzz 显示秒(000-999)
                     * AP 用大写字母表示上午/下午(AM/PM)
                     * ap 用小写字母表示上午/下午(am/pm)
                     */

                    vbox->addWidget(timeEdit);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Time Edit
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Time Edit"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Time Edit"]);
        }else if("Data Edit" == str){
            if(nullptr == m_mapRightWidget["Data Edit"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Data Edit");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Data Edit
                    //Data Edit 日期编辑框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("日期编辑框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QDateEdit* dateEdit = new QDateEdit(QDate::currentDate());
                    dateEdit->setFixedWidth(200);
                    //dateEdit->setDisplayFormat("yyyy/MM/dd");//设置显示格式

                    vbox->addWidget(dateEdit);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Data Edit
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Data Edit"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Data Edit"]);
        }else if("Data/Time Edit" == str){
            if(nullptr == m_mapRightWidget["Data/Time Edit"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Data/Time Edit");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Data/Time Edit
                    //Data/Time Edit 日期时间编辑框
                    QDialog* dialog = new QDialog;
                    dialog->resize(200,50);
                    dialog->setWindowTitle("日期时间编辑框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QDateTimeEdit* dateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime());
                    dateTimeEdit->setCalendarPopup(true);//弹出日期控件

                    vbox->addWidget(dateTimeEdit);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Data/Time Edit
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Data/Time Edit"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Data/Time Edit"]);
        }else if("Dial" == str){
            if(nullptr == m_mapRightWidget["Dial"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Dial");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Dial
                    //Dial 表盘框
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("表盘框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QDial* dial = new QDial;
                    dial->setNotchTarget(10);//设置多少值一个刻度,总100
                    dial->setNotchesVisible(true);//设置显示刻度
                    dial->setWrapping(true);//设置刻度包含整个 控件

                    QLabel* label = new QLabel;
                    QTimer *timer = new QTimer(dialog);
                    connect(timer, &QTimer::timeout,this,[=](){
                        label->setText(QString("当前值:%1").arg(dial->value()));//
                    });
                    timer->start(100);

                    vbox->addWidget(dial);
                    vbox->addWidget(label);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Dial
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Dial"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Dial"]);
        }else if("Horizontal Scroll Bar" == str){
            if(nullptr == m_mapRightWidget["Horizontal Scroll Bar"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Horizontal Scroll Bar");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Horizontal Scroll Bar
                    //Horizontal Scroll Bar 水平滚动条
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("水平滚动条示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QLabel* label = new QLabel;
                    QScrollBar* scroBar = new QScrollBar(Qt::Horizontal,this);
                    scroBar->setRange(0,100);//设置范围
                    scroBar->setValue(50);//设置当前值
                    connect(scroBar, &QScrollBar::valueChanged,this,[=](int value){
                        label->setText("当前值:"+QString::number(value));
                    });
                    vbox->addWidget(label);
                    vbox->addWidget(scroBar);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Horizontal Scroll Bar
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Horizontal Scroll Bar"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Horizontal Scroll Bar"]);
        }else if("Vertical Scroll Bar" == str){
            if(nullptr == m_mapRightWidget["Vertical Scroll Bar"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Vertical Scroll Bar");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Vertical Scroll Bar
                    //Vertical Scroll Bar 垂直滚动条
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("垂直滚动条示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QLabel* label = new QLabel;
                    QScrollBar* scroBar = new QScrollBar(Qt::Vertical,this);
                    scroBar->setRange(0,100);//设置范围
                    scroBar->setValue(50);//设置当前值
                    connect(scroBar, &QScrollBar::valueChanged,this,[=](int value){
                        label->setText("当前值:"+QString::number(value));
                    });
                    vbox->addWidget(label);
                    vbox->addWidget(scroBar);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Vertical Scroll Bar
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Vertical Scroll Bar"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Vertical Scroll Bar"]);
        }else if("Horizontal Slider" == str){
            if(nullptr == m_mapRightWidget["Horizontal Slider"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Horizontal Slider");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Horizontal Slider
                    //Horizontal Slider 水平滑块
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("水平滑块示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QLabel* label = new QLabel;
                    QSlider* slider = new QSlider(Qt::Horizontal,this);
                    slider->setRange(0,100);//设置范围
                    slider->setValue(50);//设置当前值
                    connect(slider, &QSlider::valueChanged,this,[=](int value){
                        label->setText("当前值:"+QString::number(value));
                    });
                    vbox->addWidget(label);
                    vbox->addWidget(slider);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Horizontal Slider
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Horizontal Slider"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Horizontal Slider"]);
        }else if("Vertical Slider" == str){
            if(nullptr == m_mapRightWidget["Vertical Slider"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Vertical Slider");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Vertical Slider
                    //Vertical Slider 垂直滑块
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("垂直滑块示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QLabel* label = new QLabel;
                    QSlider* slider = new QSlider(Qt::Vertical,this);
                    slider->setRange(0,100);//设置范围
                    slider->setValue(50);//设置当前值
                    connect(slider, &QSlider::valueChanged,this,[=](int value){
                        label->setText("当前值:"+QString::number(value));
                    });
                    vbox->addWidget(label);
                    vbox->addWidget(slider);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Vertical Slider
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Vertical Slider"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Vertical Slider"]);
        }else if("Key Sequence Edit" == str){
            if(nullptr == m_mapRightWidget["Key Sequence Edit"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Key Sequence Edit");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Key Sequence Edit
                    //Key Sequence Edit 快捷键输入框
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("快捷键输入框示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QLabel* label = new QLabel;
                    QKeySequenceEdit* keyEdit = new QKeySequenceEdit(this);
                    connect(keyEdit,&QKeySequenceEdit::keySequenceChanged,this,[=](const QKeySequence &keySequence){
                        label->setText("当前输入:"+keySequence.toString());
                    });
                    vbox->addWidget(label);
                    vbox->addWidget(keyEdit);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Key Sequence Edit
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Key Sequence Edit"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Key Sequence Edit"]);
        }else if("Label" == str){
            if(nullptr == m_mapRightWidget["Label"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Label");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Label
                    //Label 文本标签
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("文本标签示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);
                    QLabel* label = new QLabel("label");
                    vbox->addWidget(label);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Label
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Label"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Label"]);
        }else if("Text Browser" == str){
            if(nullptr == m_mapRightWidget["Text Browser"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Text Browser");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Text Browser
                    //Text Browser 文本浏览控件
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("文本浏览控件示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);
                    QTextBrowser* textBrowser = new QTextBrowser;
                    vbox->addWidget(textBrowser);

                    dialog->exec();
                    dialog->deleteLater();
                    //key:Text Browser
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Text Browser"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Text Browser"]);
        }else if("Graphics View" == str){
            if(nullptr == m_mapRightWidget["Graphics View"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Graphics View");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Graphics View
                    //Graphics View 图形视图
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("图形视图示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QGraphicsView* grapView = new QGraphicsView;
                    QGraphicsScene* scene = new QGraphicsScene;
                    grapView->setScene(scene);
                    QGraphicsRectItem *m_rectItem = new QGraphicsRectItem();   // 定义一个矩形图元
                    QPen pen;   // 定义一个画笔,设置画笔颜色和宽度
                    pen.setColor(QColor(0, 160, 230));
                    pen.setWidth(1);
                    m_rectItem->setRect(0, 0, 80, 80);
                    m_rectItem->setPen(pen);
                    m_rectItem->setBrush(QBrush(QColor(255, 0, 255)));
                    m_rectItem->setFlag(QGraphicsItem::ItemIsMovable);
                    scene->addItem(m_rectItem);

                    vbox->addWidget(grapView);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Graphics View
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Graphics View"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Graphics View"]);
        }else if("Calendar Widget" == str){
            if(nullptr == m_mapRightWidget["Calendar Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Calendar Widget");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Calendar Widget
                    //Calendar Widget 日历小工具
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("日历小工具示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QLabel* label = new QLabel;
                    QCalendarWidget* calendar = new QCalendarWidget;
                    connect(calendar,&QCalendarWidget::clicked,this,[=](const QDate date){
                        label->setText(date.toString());
                    });

                    vbox->addWidget(label);
                    vbox->addWidget(calendar);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Calendar Widget
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Calendar Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Calendar Widget"]);
        }else if("LCD Number" == str){
            if(nullptr == m_mapRightWidget["LCD Number"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("LCD Number");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:LCD Number
                    //LCD Number 液晶显示
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("液晶显示示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QLCDNumber* lcdNumber = new QLCDNumber(this);

                    lcdNumber->setDigitCount(25); // 设置能显示的位数
                    lcdNumber->setMode(QLCDNumber::Dec);// 设置显示的模式为十进制
                    lcdNumber->setSegmentStyle(QLCDNumber::Flat);// 设置显示外观
                    //lcdNumber->setStyleSheet("border: 1px solid green; color: green; background: silver;");// 设置样式
                    QTimer* timer = new QTimer;
                    connect(timer,&QTimer::timeout,this,[=]()mutable{
                        QDateTime dateTime = QDateTime::currentDateTime();// 获取系统当前时间
                        lcdNumber->display(dateTime.toString("yyyy-MM-dd HH:mm:ss.zzz"));// 显示的内容
                    });
                    timer->start(10);

                    vbox->addWidget(lcdNumber);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:LCD Number
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["LCD Number"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["LCD Number"]);
        }else if("Progress Bar" == str){
            if(nullptr == m_mapRightWidget["Progress Bar"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Progress Bar");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Progress Bar
                    //Progress Bar 进度条
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("进度条示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QProgressBar* progressBar = new QProgressBar;
                    progressBar->setAlignment(Qt::AlignCenter);//文本显示中间
                    progressBar->setRange(0,100);
                    QTimer* timer = new QTimer;
                    int cnt=0;
                    connect(timer,&QTimer::timeout,this,[=]()mutable{
                        if(cnt >100)
                            cnt =0;
                        progressBar->setValue(cnt++);
                    });
                    timer->start(100);

                    vbox->addWidget(progressBar);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Progress Bar
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Progress Bar"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Progress Bar"]);
        }else if("Horizontal Line" == str){
            if(nullptr == m_mapRightWidget["Horizontal Line"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Horizontal Line");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Horizontal Line
                    //Horizontal Line 水平分割线
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("水平分割线示例");

                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);
                    QFrame* line = new QFrame;
                    line->setFrameShape(QFrame::HLine);
                    line->setFrameShadow(QFrame::Plain);
                    vbox->addWidget(line);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Horizontal Line
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Horizontal Line"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Horizontal Line"]);
        }else if("Verical Line" == str){
            if(nullptr == m_mapRightWidget["Verical Line"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("Verical Line");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:Verical Line
                    //Verical Line 垂直分割线
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("垂直分割线示例");
                    QVBoxLayout* vbox = new QVBoxLayout;

                    dialog->setLayout(vbox);
                    QFrame* line = new QFrame;
                    line->setFrameShape(QFrame::VLine);
                    line->setFrameShadow(QFrame::Plain);

                    vbox->addWidget(line);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:Verical Line
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["Verical Line"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["Verical Line"]);
        }else if("OpenGl Widget" == str){
            if(nullptr == m_mapRightWidget["OpenGl Widget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("OpenGl Widget");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:OpenGl Widget
                    //OpenGl Widget OpenGL图形渲染窗口部件
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("OpenGL图形渲染窗口部件示例");
                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QOpenGLWidget* glWidget = new QOpenGLWidget;
                    QLabel* label = new QLabel(glWidget);
                    label->setText("QOpenGLWidget_label");
                    label->setStyleSheet("color:rgb(255,255,255);");

                    vbox->addWidget(glWidget);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:OpenGl Widget
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["OpenGl Widget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["OpenGl Widget"]);
        }else if("QQuickWidget" == str){
            if(nullptr == m_mapRightWidget["QQuickWidget"])
            {
                RightWidget* widget = new RightWidget(this);
                widget->SetText("QQuickWidget");
                connect(widget,&RightWidget::ClickBtn,this,[=](){
                    //key:QQuickWidget
                    //QQuickWidget 加载Qml文件
                    QDialog* dialog = new QDialog;
                    dialog->setWindowTitle("加载Qml文件示例");
                    QVBoxLayout* vbox = new QVBoxLayout;
                    dialog->setLayout(vbox);

                    QQuickWidget *quickWidget = new QQuickWidget;
                    quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
                    quickWidget->setSource(QUrl("qrc:/test.qml"));

                    vbox->addWidget(quickWidget);
                    dialog->exec();
                    dialog->deleteLater();
                    //key:QQuickWidget
                });
                m_rightStackWidget->addWidget(widget);
                m_mapRightWidget["QQuickWidget"] = widget;
            }
            m_rightStackWidget->setCurrentWidget(m_mapRightWidget["QQuickWidget"]);
        }
    });
}

void MainWindow::showEvent(QShowEvent *event)
{
    static bool bShow = false;
    if(!bShow)
    {
        bShow = true;
        InitWidget();
    }
}

void MainWindow::hideEvent(QHideEvent *event)
{

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值