【Qt学习】 垂直布局和水平布局

目录

一:项目重构

二:VBoxLayout 垂直布局

三:HBoxLayout 水平布局

四:水平垂直布局综合应用

五:创建控件


一:项目重构

在使用Qt软件的时候,有时候会出现程序异常结束[而自己的代码逻辑是没有问题的]

此时的解决方法:重新构建项目

二:VBoxLayout 垂直布局

垂直布局,代码示例 

indexwin.h .cpp

#ifndef INDEXWIN_H
#define INDEXWIN_H

#include <QWidget>
#include<QVBoxLayout>//垂直布局
#include<QPushButton>

class IndexWin : public QWidget
{
    Q_OBJECT
public:
    explicit IndexWin(QWidget *parent = 0);

    QWidget *window;
    QPushButton *button1;
    QPushButton *button2;
    QPushButton *button3;
    QPushButton *button4;
    QPushButton *button5;


signals:

public slots:
};

#endif // INDEXWIN_H
#include "indexwin.h"

IndexWin::IndexWin(QWidget *parent) : QWidget(parent)
{
    this->resize(1500,800);

    window = new QWidget(this);
    button1 = new QPushButton("One");
    button2 = new QPushButton("Two");
    button3 = new QPushButton("Three");
    button4 = new QPushButton("Four");
    button5 = new QPushButton("Five");

    QVBoxLayout *layout = new QVBoxLayout;//垂直布局
    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(button3);
    layout->addWidget(button4);
    layout->addWidget(button5);

    window->setLayout(layout);
}

main.cpp

#include "widget.h"
#include <QApplication>
#include"indexwin.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    IndexWin w;
    w.show();

    return a.exec();
}

垂直布局,效果展示 


三:HBoxLayout 水平布局

水平布局,代码示例 

indexwin.h .cpp

#ifndef INDEXWIN_H
#define INDEXWIN_H

#include <QWidget>
#include<QVBoxLayout>//垂直布局
#include<QHBoxLayout>//水平布局
#include<QPushButton>

class IndexWin : public QWidget
{
    Q_OBJECT
public:
    explicit IndexWin(QWidget *parent = 0);

    QWidget *window;
    QPushButton *button1;
    QPushButton *button2;
    QPushButton *button3;
    QPushButton *button4;
    QPushButton *button5;


signals:

public slots:
};

#endif // INDEXWIN_H
#include "indexwin.h"

IndexWin::IndexWin(QWidget *parent) : QWidget(parent)
{
    this->resize(1500,800);

    window = new QWidget(this);
    button1 = new QPushButton("One");
    button2 = new QPushButton("Two");
    button3 = new QPushButton("Three");
    button4 = new QPushButton("Four");
    button5 = new QPushButton("Five");

    QHBoxLayout *layout = new QHBoxLayout;//水平布局
    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(button3);
    layout->addWidget(button4);
    layout->addWidget(button5);

    window->setLayout(layout);
}

水平布局,效果展示

四:水平垂直布局综合应用

布局设计 练习如下:

水平的五个按钮(按钮在window中)

垂直的两个窗口(window和window1垂直)

indexwin.h .cpp

#ifndef INDEXWIN_H
#define INDEXWIN_H

#include <QWidget>
#include<QVBoxLayout>//垂直布局
#include<QHBoxLayout>//水平布局
#include<QPushButton>

class IndexWin : public QWidget
{
    Q_OBJECT
public:
    explicit IndexWin(QWidget *parent = 0);

    QWidget *window;
    QPushButton *button1;
    QPushButton *button2;
    QPushButton *button3;
    QPushButton *button4;
    QPushButton *button5;
    QWidget *window1;


signals:

public slots:
};

#endif // INDEXWIN_H
#include "indexwin.h"

IndexWin::IndexWin(QWidget *parent) : QWidget(parent)
{
    this->resize(1500,800);

    //多个窗口不要this
    window = new QWidget();
    button1 = new QPushButton("One");
    button2 = new QPushButton("Two");
    button3 = new QPushButton("Three");
    button4 = new QPushButton("Four");
    button5 = new QPushButton("Five");

    QHBoxLayout *layout = new QHBoxLayout;//水平的按钮
    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(button3);
    layout->addWidget(button4);
    layout->addWidget(button5);
    window->setLayout(layout);

    window1= new QWidget();

    //this是最大窗口              垂直的窗口
    QVBoxLayout *vlayout = new QVBoxLayout(this);//两个窗口垂直放置
    vlayout->addWidget(window);
    vlayout->addWidget(window1);
}

main.cpp

#include "widget.h"
#include <QApplication>
#include"indexwin.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    IndexWin w;
    w.show();

    return a.exec();
}

效果展示

 在window1中放置一个按钮

#include "indexwin.h"

IndexWin::IndexWin(QWidget *parent) : QWidget(parent)
{
    this->resize(1500,800);

    //多个窗口不要this
    window = new QWidget();
    button1 = new QPushButton("One");
    button2 = new QPushButton("Two");
    button3 = new QPushButton("Three");
    button4 = new QPushButton("Four");
    button5 = new QPushButton("Five");

    QHBoxLayout *layout = new QHBoxLayout;//水平的按钮
    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(button3);
    layout->addWidget(button4);
    layout->addWidget(button5);
    window->setLayout(layout);

    window1= new QWidget();
    QPushButton *button1 = new QPushButton("One",window1);//在window1中放置一个按钮

    //this是最大窗口              垂直的窗口
    QVBoxLayout *vlayout = new QVBoxLayout(this);//两个窗口垂直放置
    vlayout->addWidget(window);
    vlayout->addWidget(window1);
}

效果展示

五:创建控件

创建控件方法[两种方法]如下 

1.自定义所有控件(不推荐)

2.动态创建所有控件(推荐)

indexwin.h .cpp

#ifndef INDEXWIN_H
#define INDEXWIN_H

#include <QWidget>
#include<QVBoxLayout>//垂直布局
#include<QHBoxLayout>//水平布局
#include<QPushButton>
#include<QLineEdit>

class IndexWin : public QWidget
{
    Q_OBJECT
public:
    explicit IndexWin(QWidget *parent = 0);

    QWidget *leftwin;
    QWidget *topwin;
    QWidget *indexwin;
    QLineEdit *searchEdit;
    QPushButton *userBtn;
    QPushButton *vipBtn;



signals:

public slots:
};

#endif // INDEXWIN_H
#include "indexwin.h"
#include<QStringList>

IndexWin::IndexWin(QWidget *parent) : QWidget(parent)
{
     this->resize(1500,800);

     leftwin = new QWidget();
     topwin = new QWidget();
     indexwin = new QWidget();

     //方法一:自定义所有控件
     //控件水平
     QHBoxLayout *hboxlayout = new QHBoxLayout(topwin);
     searchEdit = new QLineEdit();
     userBtn = new QPushButton();
     vipBtn = new QPushButton();
     hboxlayout->addWidget(searchEdit);
     hboxlayout->addWidget(userBtn);
     hboxlayout->addWidget(vipBtn);

     //方法二:动态创建所有控件
     //按钮控件垂直
     QVBoxLayout *vboxlayout1 = new QVBoxLayout(indexwin);
     QStringList funBtnlist;
     funBtnlist<<"logo"<<"视频"<<"动漫"<<"电影";
     for(int i=0;i<funBtnlist.size();i++)
     {
         QPushButton *newBtn = new QPushButton(funBtnlist.at(i));
         vboxlayout1->addWidget(newBtn);
     }

     //两个窗口垂直
     QVBoxLayout *vboxlayout = new QVBoxLayout(this);
     vboxlayout->addWidget(topwin);
     vboxlayout->addWidget(indexwin);
}

main.cpp

#include "widget.h"
#include <QApplication>
#include"indexwin.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    IndexWin w;
    w.show();

    return a.exec();
}

效果展示 


  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenruhan_QAQ_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值