Qt页面布局

Qt页面布局类

QLayout
QBoxLayout
QVBoxLayout
QHBoxLayout
QGridLayout
QFormLayout
QStackedLayout
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle("HapticChip");
    QDesktopWidget * desktop=QApplication::desktop();
    auto screen= desktop->screenNumber(this);
    QRect rect=desktop->screenGeometry(screen);
    this->move((rect.width()-this->width())/2,(rect.height()-this->height())/2);


    QToolBar* toolBar=new QToolBar(this);
    toolBar->setAllowedAreas(Qt::TopToolBarArea);//设置工具栏的停靠区域
    toolBar->setMovable(false);//设置工具栏的可移动性

    chipNameCB=new QComboBox();
    chipNameCB->addItem("SIA86917");
    chipNameCB->addItem("SIA86927");
    chipNameCB->addItem("SIH6887");
    chipNameCB->setCurrentIndex(0);
    toolBar->addWidget(chipNameCB);

    //添加分割线到工具栏中
    toolBar->addSeparator();

    //将工具栏对象添加到主窗口中
    this->addToolBar(toolBar);

    //创建一个widget设置为主窗体的CentralWidget
    mainWidget =new QWidget();
    this->setCentralWidget(mainWidget);

    //创建一个Layout,并把Layout添加到CentralWidget中
    QStackedLayout* layout=new QStackedLayout();
    layout->setMargin(5);
    this->centralWidget()->setLayout(layout);


    QWidget* SIA86917=new QWidget();
    QHBoxLayout* hLayout =new QHBoxLayout();
    SIA86917->setLayout(hLayout);
    hLayout->setDirection(QBoxLayout::LeftToRight);
    hLayout->setMargin(5);
    hLayout->addWidget(new QPushButton("SIA86917"),1);
    hLayout->addWidget(new QPushButton("SIA86917"),2);
    hLayout->addWidget(new QPushButton("SIA86917"),3);
    hLayout->addWidget(new QPushButton("SIA86917"),4);
    hLayout->addStretch(1);
    layout->addWidget(SIA86917);



    QWidget* SIA86927=new QWidget();
    QGridLayout* gLayout=new QGridLayout();
    SIA86927->setLayout(gLayout);
    gLayout->addWidget(new QPushButton("SIA86927"),0,0);
    gLayout->addWidget(new QPushButton("SIA86927"),0,2);
    gLayout->addWidget(new QPushButton("SIA86927"),2,0);
    gLayout->addWidget(new QPushButton("SIA86927"),2,2);
    gLayout->addWidget(new QPushButton("SIA86927"),0,1,1,3);
    layout->addWidget(SIA86927);


    QWidget* SIH6887=new QWidget();
    QFormLayout* fLayout=new QFormLayout();
    fLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
    SIH6887->setLayout(fLayout);
    fLayout->addRow("111",new QPushButton("SIH6887"));
    fLayout->addRow("222",new QPushButton("SIH6887"));
    fLayout->addRow("333",new QPushButton("SIH6887"));
    layout->addWidget(SIH6887);

    connect(chipNameCB,SIGNAL(currentIndexChanged(int)),layout,SLOT(setCurrentIndex(int)));
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 通过调用 setDirection() 方法,将添加到 QVBoxLayout 管理器中的所有控件(包括空白行)按照从下到上的顺序依次摆放。
  • 通过调用 addStrech() 方法,向管理器中先后添加了两个空白行或列。
  • 通过调用 addWidget() 方法,向管理器中先后添加了widget,并且可以设置拉伸系数比例。
  • 通过调用 setLayout() 方法,成功地将 layout 布局管理器添加到了 widget 窗口中。当然,也可以在创建 layout 对象时指定 widget 作为它的父窗口,两种方式是完全等价的。
  • QGridLayout 的行标和列标都从 0 开始,我们可以随意指定 QGridLayout 的行数和列数,各个控件可以随意摆放,必要时某些位置可以空着不用。
  • QFormLayout 可以容纳很多个widget以及对应的标签,并将它们从上到下依次排列在界面上。大多数情况下,QFormLayout 底层是用 QGridLayout 网格布局管理器实现的,和后者不同的是,QFormLayout 只包含 2 列(不限制行数),且第一列放置标签,第二列放置widget。
  • QStackedLayout 布局管理器可以容纳多个控件或者窗口,但每次只显示其中的一个。QStackedLayout 自身无法切换当前显示的控件或窗口,实际应用时通常和 QListWidget 或者 QComboBox 搭配使用。
  • 5 种布局控件都可以嵌套使用,例如将 QVBoxLayout 放到 QHBoxLayout 内部、将 QGridLayout 放到 QStackedLayout 内部等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值