目录
0x00分割窗口
QSplitter
效果:
代码:
#include "mainwindow.h"
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//QSplitter 就相当于一刀
//Qt::Vertical 垂直排列 相当于横着切一刀
//Qt::Horizontal 水平排列 相当于竖着切一刀
//将窗口分为上下两个
QSplitter* pMainSplitter = new QSplitter(Qt::Vertical);
//向上下两部分填充内容
QTextEdit* pQTextEdit; //文本输入框
//给上窗口指定内容
pQTextEdit = new QTextEdit("top window",pMainSplitter);//第二个参数指定父窗口
//给下窗口指定内容
//pQTextEdit = new QTextEdit("bottom window",pMainSplitter);
//如果需要分割下窗口
QSplitter* pBottomSplitter = new QSplitter(Qt::Horizontal,pMainSplitter);//第二个参数指定父窗口
pQTextEdit = new QTextEdit("right window",pBottomSplitter);
pQTextEdit = new QTextEdit("left window",pBottomSplitter);
pBottomSplitter->setMinimumSize(400,200);//设置窗口的最小大小
pMainSplitter->show();
return a.exec();
}
0x01.停靠窗口 QDockWidget
效果:
代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDockWidget>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
MakeDockWindow();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::MakeDockWindow()
{
QDockWidget* pQDockWidget = new QDockWidget("停靠窗口",this);//父窗口是主窗口
pQDockWidget->setFeatures(QDockWidget::AllDockWidgetFeatures);
QTextEdit* pTextEdit = new QTextEdit("测试");
//指定停靠窗口内容
pQDockWidget->setWidget(pTextEdit);
//将停靠窗口添加到主窗口的左边
this->addDockWidget(Qt::LeftDockWidgetArea,pQDockWidget);
}
0x02.堆栈窗口
效果:
代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QListWidget>
#include <QStackedWidget>
#include <QTextEdit>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initWindow();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initWindow()
{
QListWidget* pListWidget = new QListWidget(this);
pListWidget->addItem("item1");
pListWidget->addItem("item2");
pListWidget->addItem("item3");
pListWidget->setMinimumHeight(200);
this->pStackedWidget = new QStackedWidget(this);
QTextEdit* pTextEdit = new QTextEdit("Stacked Window1");
this->pStackedWidget->addWidget(pTextEdit);
pTextEdit = new QTextEdit("Stacked Window2");
this->pStackedWidget->addWidget(pTextEdit);
pTextEdit = new QTextEdit("Stacked Window3");
this->pStackedWidget->addWidget(pTextEdit);
this->pStackedWidget->setGeometry(110,0,300,400);
//当左边的List选中项改变时,改变左边堆栈窗口中的内容
// connect(pListWidget,SIGNAL(currentRowChanged(int)),pStackedWidget,SLOT(setCurrentIndex(int)));
//也可以让主窗口this接收信号,然后我们自己定义一个槽函数
connect(pListWidget,SIGNAL(currentRowChanged(int)),this,SLOT(ChangeWindow(int)));
}
void MainWindow::ChangeWindow(int index)
{
qDebug()<<index; //index用来接收list中item的索引值
this->pStackedWidget->setCurrentIndex(index);
}
0x03.基本布局
QHBoxLayout 横向布局
QVBoxLayout 纵向布局
网格布局
#include "widget.h"
#include "ui_widget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QSpacerItem>
#include <QGridLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
InitWindow2();
}
Widget::~Widget()
{
delete ui;
}
void Widget::InitWindow()
{
QVBoxLayout* pVboxLayout = new QVBoxLayout(this);
QHBoxLayout* pHboxLayout = new QHBoxLayout();
QLabel* pLabel = new QLabel("username:",this);
//pLineEdit 单行输入框
//pTextEdit 多行输入框
QLineEdit* pLineEdit = new QLineEdit("please input your username",this);
pHboxLayout->addWidget(pLabel);
pHboxLayout->addWidget(pLineEdit);
//将横向布局加入到纵向布局中
pVboxLayout->addLayout(pHboxLayout);
pHboxLayout = new QHBoxLayout();
pLabel = new QLabel("password:",this);
pLineEdit = new QLineEdit("please input your password",this);
pHboxLayout->addWidget(pLabel);
pHboxLayout->addWidget(pLineEdit);
//将横向布局加入到纵向布局中
pVboxLayout->addLayout(pHboxLayout);
//加入弹簧
//宽,高,横向设置,纵向设置
QSpacerItem* pSpac = new QSpacerItem(1,1,QSizePolicy::Minimum,QSizePolicy::Expanding);
pVboxLayout->addItem(pSpac);
}
void Widget::InitWindow2()
{
QGridLayout* pGridLayout = new QGridLayout(this);
QLabel* pLabel = new QLabel("姓名:",this);
QLineEdit* pLineEdit = new QLineEdit("张三",this);
//行,列,占多少行,占多少列
pGridLayout->addWidget(pLabel,0,0,1,1);
pGridLayout->addWidget(pLineEdit,0,1,1,1);
pLabel = new QLabel("姓名:",this);
pLineEdit = new QLineEdit("张三",this);
//行,列,占多少行,占多少列
pGridLayout->addWidget(pLabel,1,0,1,1);
pGridLayout->addWidget(pLineEdit,1,1,1,1);
}