Qt之布局:改变控件位置关系QVBoxLayout

1、如果要改变位置关系,方法1是直接setGeometry,还有一种方法是添加布局控件。

如果不设置两者位置关系,控件都会直接从坐标0, 0开始放置:

95fb21931ef890573686175ea56c2f17a78.jpg

2、添加垂直布局

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QVBoxLayout>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget w;

    QPushButton button;   /*按钮是窗口*/
    button.setText("Button");
    button.setParent(&w);   //窗口对象的父子关系:设置父窗口是button
   // button.setGeometry(30, 30, 100, 30);   //坐标原点在窗口的左上角[不包括工具栏]

    QLineEdit edit;
    edit.setParent(&w);

    QVBoxLayout vLayout;
    vLayout.addWidget(&button);
    vLayout.addWidget(&edit);
    w.setLayout(&vLayout);
    
    w.setWindowTitle("Hello world");
    w.show();
    return app.exec();
}

7415bbad1befd075682aecc6560fc1ba204.jpg

3、添加水平布局

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget w;

    QPushButton button;   /*按钮是窗口*/
    button.setText("Button");
    button.setParent(&w);   //窗口对象的父子关系:设置父窗口是button
   // button.setGeometry(30, 30, 100, 30);   //坐标原点在窗口的左上角[不包括工具栏]

    QLineEdit edit;
    edit.setParent(&w);

    QHBoxLayout vLayout;
    vLayout.addWidget(&button);
    vLayout.addWidget(&edit);
    w.setLayout(&vLayout);

    w.setWindowTitle("Hello world");
    w.show();
    return app.exec();
}

关系:窗口里面放置layout----> layout放置控件button和edit----> 这个两个控件会自动根据layout的规则而布局

4、添加弹簧

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget w;

    QPushButton button;   /*按钮是窗口*/
    button.setText("Button");
    button.setParent(&w);   //窗口对象的父子关系:设置父窗口是button
   // button.setGeometry(30, 30, 100, 30);   //坐标原点在窗口的左上角[不包括工具栏]

    QLineEdit edit;
    edit.setParent(&w);

    QHBoxLayout vLayout;
   // vLayout.addStretch(1);  //添加弹簧
    vLayout.addWidget(&button);
    vLayout.addWidget(&edit);
    vLayout.addStretch(1);
    w.setLayout(&vLayout);

    w.setWindowTitle("Hello world");
    w.show();
    return app.exec();
}

fbd22ac1ae3ffebff452ed102905233b55c.jpg

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget w;

    QPushButton button;   /*按钮是窗口*/
    button.setText("Button");
    button.setParent(&w);   //窗口对象的父子关系:设置父窗口是button
   // button.setGeometry(30, 30, 100, 30);   //坐标原点在窗口的左上角[不包括工具栏]

    QLineEdit edit;
    edit.setParent(&w);

    QHBoxLayout vLayout;
    vLayout.addStretch(1);  //添加弹簧
    vLayout.addWidget(&button, 1);
    vLayout.addWidget(&edit, 1);
    vLayout.addStretch(1);   //设置弹簧的比重:4分天下
    w.setLayout(&vLayout);

    w.setWindowTitle("Hello world");
    w.show();
    return app.exec();
}

e8c0b6f55d23829de2bbb5f84168db3a383.jpg

5、控件之间间隔

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget w;

    QPushButton button;   /*按钮是窗口*/
    button.setText("Button");

    QLineEdit edit;

    QHBoxLayout vLayout;   //有了Layout之后,其父子关系就不需要了,因为会自动构造控件的父子关系
    vLayout.addStretch(1);  //添加弹簧
    vLayout.addWidget(&button, 1);   //添加控件窗口到LayOut布局上
    vLayout.addSpacing(50);   //在两个控件窗口之间添加50个像素作为间隔两个控件
    vLayout.addWidget(&edit, 1);
    vLayout.addStretch(1);   //设置弹簧的比重:4分天下
    w.setLayout(&vLayout);

    w.setWindowTitle("Hello world");
    w.show();
    return app.exec();
}

6095f07390393ca85b55ea26c5175b438d3.jpg

6、网格布局

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QGridLayout>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget w;

    QPushButton button;   /*按钮是窗口*/
    button.setText("0, 0");

    QLineEdit edit;
    
    QGridLayout gLayout;
    
    gLayout.setColumnStretch(0, 1); //在第0行放置1根弹簧
    gLayout.setRowStretch(3, 1);    //在第0列放置1根弹簧
    gLayout.addWidget(&button, 0, 1);
    gLayout.addWidget(&edit, 0, 2);
    gLayout.addWidget(new QPushButton("1, 0"), 1, 1);
    gLayout.addWidget(new QPushButton("1, 1"), 1, 2);
    gLayout.addWidget(new QPushButton("3, 1"), 2, 1, 1, 2);
    w.setLayout(&gLayout);
    w.setWindowTitle("Hello world");
    w.show();
    return app.exec();
}

86e0aa0f3afb93ee13b7ccc2ea008ab50db.jpg

---

转载于:https://my.oschina.net/u/3919756/blog/1944117

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值