QT学习笔记Day02:QT的布局原理

目录

0x00分割窗口

0x01.停靠窗口 QDockWidget

0x02.堆栈窗口

0x03.基本布局


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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值