Qt6教程之二(6) contains

group box  是一个有标题的组合框,提供一个框架、一个标题、一个键盘快捷键;

scroll area 是一个滑动区域控件,当内部控件长宽超出时显示滑动条;

tool box是一个工具箱控件,可以存储多个子窗口;

tab widget是一个层叠窗口管理控件,整体和tab widget比较相似,也是组织多个窗口布局的一个控件。

stacked widget 是一个以栈结构方式管理窗口的容器,最先添加的窗口总是显示在最后面。

frame 也是一个比较好用的容器,在多窗口和多部件布局时比较常用!

widget 是比较常用的窗口部件,一般的窗口类均继承QWidgetl

MDI area 是多文档容器,同一页面可容纳多个窗口,但是同一时间活动显示的仅一个窗口;

dock widget 是一个特殊的窗口,一般主要用于实现在一个主窗口上面显示一个悬浮窗口。

工程结构:

接下来将分别对每一个控件用纯代码的方式进行演示,

1、group box

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void msg(bool b);

};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include<QVBoxLayout>
#include<QGroupBox>
#include <QRadioButton>
#include<QMessageBox>
#include <QPushButton>
#include <QMenu>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setGeometry(100,100,800,800);
    setWindowTitle("qt contains");

    QVBoxLayout *vbox=new QVBoxLayout;
    QGroupBox *groupBox=new QGroupBox("please select: ",this);
    groupBox->resize(400,500);

    QRadioButton *radioButton=new QRadioButton("china");
    QRadioButton *radioButton2=new QRadioButton("USA");
    QRadioButton *radioButton3=new QRadioButton("Japan");
    QRadioButton *radioButton4=new QRadioButton("aqe");

    QPushButton *bt=new QPushButton("pop menu");
    QMenu *menu=new QMenu(this);
    menu->addAction(new QAction("open"));
    menu->addAction(new QAction("close"));
    menu->addAction(new QAction("save"));
    menu->addAction(new QAction("as save"));
    bt->setMenu(menu);

    vbox->addWidget(radioButton);
    vbox->addWidget(radioButton2);
    vbox->addWidget(radioButton3);
    vbox->addWidget(radioButton4);
    vbox->addWidget(bt);

    groupBox->setLayout(vbox);

    connect(radioButton,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton2,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton3,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton4,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));


}

MainWindow::~MainWindow()
{
}

void MainWindow::msg(bool b)
{
    QMessageBox m;
    if(b) m.setText("is ");
    else m.setText("not");
    m.exec();
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

程序运行效果:

2、scroll area

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void msg(bool b);

};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include<QVBoxLayout>
#include<QGroupBox>
#include <QRadioButton>
#include<QMessageBox>
#include <QPushButton>
#include <QMenu>
#include<QScrollArea>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setGeometry(100,100,800,800);
    setWindowTitle("qt contains");

    QScrollArea *sr=new QScrollArea(this);
    sr->resize(300,300);
    QVBoxLayout *vbox=new QVBoxLayout;
    QGroupBox *groupBox=new QGroupBox("please select: ",this);
    groupBox->resize(400,500);

    QRadioButton *radioButton=new QRadioButton("china");
    QRadioButton *radioButton2=new QRadioButton("USA");
    QRadioButton *radioButton3=new QRadioButton("Japan");
    QRadioButton *radioButton4=new QRadioButton("aqe");

    QPushButton *bt=new QPushButton("pop menu");
    QMenu *menu=new QMenu(this);
    menu->addAction(new QAction("open"));
    menu->addAction(new QAction("close"));
    menu->addAction(new QAction("save"));
    menu->addAction(new QAction("as save"));
    bt->setMenu(menu);

    vbox->addWidget(radioButton);
    vbox->addWidget(radioButton2);
    vbox->addWidget(radioButton3);
    vbox->addWidget(radioButton4);
    vbox->addWidget(bt);

    groupBox->setLayout(vbox);

    sr->setWidget(groupBox);

    connect(radioButton,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton2,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton3,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton4,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));


}

MainWindow::~MainWindow()
{
}

void MainWindow::msg(bool b)
{
    QMessageBox m;
    if(b) m.setText("is ");
    else m.setText("not");
    m.exec();
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

程序运行效果:

3、tool box

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void msg(bool b);

};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include<QVBoxLayout>
#include<QGroupBox>
#include <QRadioButton>
#include<QMessageBox>
#include <QPushButton>
#include <QMenu>
#include<QScrollArea>
#include <QToolBox>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setGeometry(100,100,800,800);
    setWindowTitle("qt contains");

    QScrollArea *sr=new QScrollArea(this);
    sr->resize(300,300);
    QVBoxLayout *vbox=new QVBoxLayout;
    QGroupBox *groupBox=new QGroupBox("please select: ",this);
    groupBox->resize(400,500);

    QRadioButton *radioButton=new QRadioButton("china");
    QRadioButton *radioButton2=new QRadioButton("USA");
    QRadioButton *radioButton3=new QRadioButton("Japan");
    QRadioButton *radioButton4=new QRadioButton("aqe");

    QPushButton *bt=new QPushButton("pop menu");
    QMenu *menu=new QMenu(this);
    menu->addAction(new QAction("open"));
    menu->addAction(new QAction("close"));
    menu->addAction(new QAction("save"));
    menu->addAction(new QAction("as save"));
    bt->setMenu(menu);

    vbox->addWidget(radioButton);
    vbox->addWidget(radioButton2);
    vbox->addWidget(radioButton3);
    vbox->addWidget(radioButton4);
    vbox->addWidget(bt);

    groupBox->setLayout(vbox);
    sr->setWidget(groupBox);

    QToolBox *toolBox=new QToolBox(this);
    toolBox->addItem(sr,"scrollArea");
    toolBox->addItem(new QPushButton("button"),"button");

    QWidget *widget=new QWidget(toolBox);
    widget->setLayout(vbox);
    toolBox->addItem(widget,"widget");

    toolBox->resize(600,600);

    connect(radioButton,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton2,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton3,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));
    connect(radioButton4,SIGNAL(clicked(bool)),this,SLOT(msg(bool)));


}

MainWindow::~MainWindow()
{
}

void MainWindow::msg(bool b)
{
    QMessageBox m;
    if(b) m.setText("is ");
    else m.setText("not");
    m.exec();
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

程序运行效果:

4、tab widget

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void msg(bool b);

};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QLabel>
#include <QMessageBox>
#include <QPushButton>
#include<QVBoxLayout>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setGeometry(100,100,800,800);
    setWindowTitle("qt contains");

    QTabWidget *tabWidget=new QTabWidget(this);
    tabWidget->resize(width(),height());

    QWidget *widget=new QWidget;
    QVBoxLayout *vbox=new QVBoxLayout;
    QPushButton *bt=new QPushButton("button");
    QPushButton *bt2=new QPushButton("button");
    vbox->addWidget(bt,10);
    vbox->addWidget(bt2,10);
    widget->setLayout(vbox);

    QWidget *widget2=new QWidget;
    QVBoxLayout *vbox2=new QVBoxLayout;
    QPushButton *bt3=new QPushButton("button2");
    QPushButton *bt4=new QPushButton("button2");

    vbox2->addWidget(bt3,10);
    vbox2->addWidget(bt4,10);
    widget2->setLayout(vbox2);


    tabWidget->addTab(widget,"widget");
    tabWidget->addTab(widget2,"widget2");


}

MainWindow::~MainWindow()
{
}

void MainWindow::msg(bool b)
{
    QMessageBox m;
    if(b) m.setText("is ");
    else m.setText("not");
    m.exec();
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

程序运行效果:

5、stacked widget

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStackedWidget>

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    QStackedWidget *stackedWidget;

signals:
    void indexChange(int index);
    void indexChange2(int index);

private slots:
    void pageIndex();
    void pageIndex2();

};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QLabel>
#include <QMessageBox>
#include <QPushButton>
#include <QStackedWidget>
#include<QVBoxLayout>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setGeometry(0,0,800,800);
    setWindowTitle("qt contains");


    QPushButton *wigetButton=new QPushButton("up page",this);
    wigetButton->setGeometry(100,0,50,20);

    QPushButton *wiget2Button=new QPushButton("next page",this);
    wigetButton->setGeometry(120,0,70,40);



    stackedWidget=new QStackedWidget(this);
    stackedWidget->setGeometry(100,300,300,300);
    stackedWidget->setBackgroundRole(QPalette::Dark);

    QWidget *widget=new QWidget;
    QVBoxLayout *vbox=new QVBoxLayout;
    QPushButton *bt=new QPushButton("button");
    QPushButton *bt2=new QPushButton("button2");
    vbox->addWidget(bt,10);
    vbox->addWidget(bt2,10);
    widget->setLayout(vbox);

    QWidget *widget2=new QWidget;
    QVBoxLayout *vbox2=new QVBoxLayout;
    QPushButton *bt3=new QPushButton("button3");
    QPushButton *bt4=new QPushButton("button4");
    vbox2->addWidget(bt3,10);
    vbox2->addWidget(bt4,10);
    widget2->setLayout(vbox2);


    stackedWidget->addWidget(widget);
    stackedWidget->addWidget(widget2);

    stackedWidget->setCurrentWidget(widget2);

    connect(wigetButton,SIGNAL(clicked()),this,SLOT(pageIndex()));
   connect(this,SIGNAL(indexChange(int)),stackedWidget,SLOT(setCurrentIndex(int)));
   connect(wiget2Button,SIGNAL(clicked()),this,SLOT(pageIndex2()));
  connect(this,SIGNAL(indexChange2(int)),stackedWidget,SLOT(setCurrentIndex(int)));

}

MainWindow::~MainWindow()
{
}

void MainWindow::pageIndex()
{

    emit indexChange(0);
}

void MainWindow::pageIndex2()
{

    emit indexChange2(1);
}



main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

6、frame

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include <QFrame>
#include <QVBoxLayout>
#include<QPushButton>
#include <QLabel>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(800,400);
    setWindowTitle("frame");

    QVBoxLayout *vb=new QVBoxLayout;
    vb->addWidget(new QPushButton("hello"));
    vb->addWidget(new QLabel("label"));
    vb->addWidget(new QPushButton("button"));

    QFrame *frame=new QFrame(this);
    frame->resize(600,400);
    frame->setLayout(vb);
    frame->setLineWidth(3);
    frame->setMidLineWidth(3);
    frame->setFrameShape(QFrame::Box);
    frame->setFrameShadow(QFrame::Sunken);
    frame->setStyleSheet("background-color:green;");

}

MainWindow::~MainWindow()
{
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

7、widget

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include <QAction>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include<QRadioButton>
#include <QMenu>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(800,800);
    setWindowTitle("widget");

    QWidget *widget=new QWidget(this);

    QVBoxLayout *vb=new QVBoxLayout(widget);
    vb->setSpacing(20);
    vb->addWidget(new QLabel("label"));
    vb->addWidget(new QPushButton("button"));
    vb->addWidget(new QRadioButton("radiobutton"));


    widget->setLayout(vb);
    widget->resize(600,600);


}

MainWindow::~MainWindow()
{
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

8、MDI area

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QLabel>
#include<QMdiArea>
#include <QPushButton>
#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(800,800);
    setWindowTitle("MDI Area");

    QMdiArea *mdi=new QMdiArea(this);
    mdi->resize(width(),height());

    QWidget w(mdi);
    w.setWindowTitle("w");
    QVBoxLayout vl;
    vl.addWidget(new QLabel("label",&w));
    vl.addWidget(new QPushButton("button",&w));
    w.resize(400,400);
    w.setLayout(&vl);


    QWidget w2(mdi);
    w2.setWindowTitle("w2");
    QVBoxLayout vl2;
    vl2.addWidget(new QLabel("label2",&w2));
    vl2.addWidget(new QPushButton("button2",&w2));
    w2.resize(400,400);
    w2.setLayout(&vl2);



    mdi->addSubWindow(&w);
    mdi->addSubWindow(&w2);
    mdi->setViewMode(QMdiArea::TabbedView);

}

MainWindow::~MainWindow()
{
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

9、dock widget

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include<QDockWidget>
#include<QVBoxLayout>
#include<QPushButton>
#include<QLabel>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(800,800);
    setWindowTitle("dockwidget");

    QDockWidget *dock=new QDockWidget(this);
    QVBoxLayout *VB=new QVBoxLayout;
    VB->addWidget(new QPushButton("button"));
    VB->addWidget(new QLabel("label"));

    dock->setWidget(new QPushButton("button"));
    dock->setWidget(new QLabel("label"));

    dock->setAllowedAreas(Qt::LeftDockWidgetArea| Qt::RightDockWidgetArea);
    dock->resize(400,400);

}

MainWindow::~MainWindow()
{
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行效果:

下一篇文章:Qt6教程之二(7) input widgets

上一篇文章:Qt6教程之二(5) item widgets

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值