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