• 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)));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    在这里插入图片描述

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

    • 通过调用 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 内部等。
  • 相关阅读:
    一体机电脑辐射超标整改
    java计算机毕业设计宿舍管理系统源程序+mysql+系统+lw文档+远程调试
    公众号的附件怎么上传(如Word、Excel、Pdf等)
    【考研】操作系统——同步互斥问题(P、V操作)1
    30秒完成在Docker Desktop中搭建kafka----你肯定没我快
    经典c程序100例==61--100
    VulnHub lazysysadmin
    攻防世界题目练习——Web引导模式(四)(持续更新)
    SpringBoot集成Redisson操作Redis
    【java爬虫】使用selenium获取某宝联盟淘口令
  • 原文地址:https://blog.csdn.net/zhudaokuan/article/details/126876373