Qt学习笔记#第四章:Layout

Layout

1.QGridLayout 

Qt 框架中的一个布局管理器,用于在一个二维网格中排列部件。QGridLayout 允许您将部件按照行和列的方式进行布局,以便在用户界面中创建复杂的布局结构。

    .h

    QGridLayout *grid;
    QPushButton *butt1;
    QPushButton *butt2;
    QPushButton *butt3;
    QPushButton *butt4;    

    .cpp

    butt1 = new QPushButton(this);
    butt1->setText("第一区:顶部菜单栏选项");
    //设置固定的高度
    butt1->setFixedHeight(50);
    //大小属性
    butt1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    butt2 = new QPushButton(this);
    butt2->setText("第二区域:侧边栏选项:");
    butt2->setFixedWidth(50); //设置固定大小宽度
    //控件在水平 或 垂直上面控件的参数 控件会尽可能地扩展以填充其可用空间
    //表格根据窗口的变化而变化
    butt2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    butt3 = new QPushButton(this);
    butt3->setText("第三区域:底部选项:");

    butt3->setFixedHeight(50);
    butt3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    butt4 = new QPushButton(this);
    butt4->setText("第四区:子窗体选项:");
    //butt4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);


    grid = new QGridLayout(this);
    //通过此函数设置左侧 顶部 右侧 底部边距 主要方便布局周围进行使用
    grid->setContentsMargins(0,0,0,0);

    //设置边距 表示控件与窗体的左右边距
    grid->setMargin(30);
    //设置个控件之间的上下间距
    grid->setSpacing(40);


    //设置间隔
    //grid->setSpacing(0);
    //显示的位置   将上面的控件放入网格布局中
    grid->addWidget(butt1,0,1);
    /*
       参数1: butt2 是要添加到网格布局的控件。
       参数2: 0 是控件在网格布局中的行索引。
       参数3: 0 是控件在网格布局中的列索引。
       参数4: 3 是控件所占据的行数。
       参数5: 1 是控件所占据的列数。
       参数6: 指定对其方式
    */
    grid->addWidget(butt2,0,0,3,1);
    grid->addWidget(butt3,2,1);
    grid->addWidget(butt4,1,1);

运行效果:

2.QFormLayout

Qt 框架中的一个布局管理器,用于创建表单式的布局。它主要用于创建标签-字段对的布局,其中每个字段可以是输入框、按钮等用户界面部件。QFormLayout 的主要用途是在用户界面中创建表单、设置对话框等,以清晰地显示标签和相关字段。

.h
    QFormLayout *qLayout;
    QLineEdit   *qEdit1;
    QLineEdit   *qEdit2;
    QLineEdit   *qEdit3;
    QLineEdit   *qEdit4;
.cpp
    setFixedSize(500,400); //窗口大小

    // 创建 表单布局指针
    qLayout = new QFormLayout(this);

    qEdit1 = new QLineEdit(); //学号
    qEdit2 = new QLineEdit();   //姓名
    qEdit3 = new QLineEdit();   //学校

    qLayout->addRow("学号",qEdit1);
    qLayout->addRow("姓名",qEdit2);
    qLayout->addRow("学校",qEdit3);
    qLayout->setSpacing(8); //控件之间的上下边距

    /*
     * 设置标签的显示格式
        QFormLayout::WrapAllRows 以行位单位的操作:以每一个组件为一行 (将标签显示在单行编辑框的上面)
        QFormLayout::WrapLongRows 以行位单位的操作:以每组为一行(将标签的所有为一行显示), 一般用于小屏幕的嵌入式设备
        QFormLayout::DontWrapRows

    */
    //qLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);
    //当标签和单选编辑框,将标签显示在同一行
    qLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);
    qLayout->setLabelAlignment(Qt::AlignLeft); // 设置标签对齐方式

    setWindowTitle("表单测试布局案例");

运行效果:

3.QBoxLayout  派生出(QHBoxLayout   QVBoxLayout)这两个子类

Qt 框架中的一个布局管理器,用于在单一方向上排列部件(widget)。QBoxLayout 支持水平和垂直两种方向的排列,分别称为水平布局和垂直布局。

QBoxLayout 中,部件会按照指定的方向(水平或垂直)进行线性排列。您可以使用 QBoxLayout 来创建水平的工具栏、垂直的按钮组、状态栏等。

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget window;
    QHBoxLayout *layout = new QHBoxLayout; // 水平布局

    QPushButton *button1 = new QPushButton("Button 1");
    QPushButton *button2 = new QPushButton("Button 2");

    layout->addWidget(button1);
    layout->addWidget(button2);

    window.setLayout(layout);
    window.show();

    return app.exec();
}
4.QStackedLayout

Qt框架中的一个布局管理器,用于管理垂直或水平堆叠的窗口部件(QWidget)。它允许在同一区域显示多个窗口部件,但只显示其中的一个,通过切换当前显示的部件来实现。

QStackedLayout提供以下主要功能:

  1. 添加和移除窗口部件:

    • addWidget(QWidget *widget): 向堆叠布局中添加窗口部件。
    • insertWidget(int index, QWidget *widget): 在指定位置插入窗口部件。
    • removeWidget(QWidget *widget): 从堆叠布局中移除指定的窗口部件。
  2. 切换显示的窗口部件:

    • setCurrentIndex(int index): 设置当前显示的窗口部件索引。
    • currentWidget() const: 获取当前显示的窗口部件。
  3. 获取和设置部件的索引:

    • indexOf(QWidget *widget) const: 获取指定窗口部件的索引。
    • widget(int index) const: 获取指定索引处的窗口部件。
#include <QApplication>
#include <QMainWindow>
#include <QStackedLayout>
#include <QPushButton>
#include <QTextEdit>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建主窗口
    QMainWindow mainWindow;

    // 创建QStackedLayout对象
    QStackedLayout *stackedLayout = new QStackedLayout;

    // 创建窗口部件
    QPushButton *button1 = new QPushButton("Button 1");
    QPushButton *button2 = new QPushButton("Button 2");
    QTextEdit *textEdit = new QTextEdit;

    // 将窗口部件添加到布局中
    stackedLayout->addWidget(button1);
    stackedLayout->addWidget(button2);
    stackedLayout->addWidget(textEdit);

    // 设置默认显示的窗口部件
    stackedLayout->setCurrentWidget(button1);

    // 设置QStackedLayout为主窗口的中央部件
    QWidget *centralWidget = new QWidget(&mainWindow);
    centralWidget->setLayout(stackedLayout);
    mainWindow.setCentralWidget(centralWidget);
    mainWindow.show();

    return app.exec();
}

5.QSplitter (Qt框架中的一个控件(widget),用于创建可调整大小的分隔窗口布局) 

使用QSplitter时,通常会将其他的控件添加到QSplitter中,以形成分隔窗口的效果。这些子控件可以是任意的QWidget派生类,例如QPushButton、QTreeView、QDoctWidget等。

.h
    QSplitter   *spMainWindow;
    QTextEdit   *txteditmain;
.cpp   
  //1.拆分窗口 (分割窗口\分裂窗口布局)
    spMainWindow = new QSplitter(Qt::Horizontal,0);
    txteditmain  = new QTextEdit("左边主窗口",spMainWindow);

    //2.右边部分 拆分右边窗口
    QSplitter *spRight = new QSplitter(Qt::Vertical,spMainWindow);
    QTextEdit *txteditup  = new QTextEdit("右边上窗口",spRight);
    QTextEdit *txteditdown  = new QTextEdit("右边下窗口",spRight);


    QSplitter *sp = new QSplitter(Qt::Horizontal,spMainWindow);
    QTextEdit *txt  = new QTextEdit("新拆分",sp);

    spMainWindow->setWindowTitle("拆分窗口");
    spMainWindow->show();

运行效果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VS Qt案例进阶是指在使用Visual Studio(VS)和Qt框架进行开发时,更加深入地了解和掌握Qt的相关功能和特性的过程。 首先,Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的类库和工具,可以帮助开发者快速构建高质量的软件应用。在使用VS进行Qt开发时,可以通过安装Qt插件和相应的开发包,将Qt集成到VS的开发环境中,从而可以方便地利用VS的强大功能进行Qt应用程序的开发和调试。 在Vs Qt案例进阶中,可以进一步学习和应用Qt的各种特性和功能。例如,Qt提供了丰富的GUI组件库,可以方便地创建各种窗口、对话框、按钮、文本框等等,通过学习和使用这些组件,可以更加灵活地构建用户界面;Qt还提供了强大的信号和槽机制,可以方便地处理事件和信号的传递,从而实现功能模块之间的协作;另外,Qt还支持数据库访问、网络通信、图形绘制等多种功能,可以根据具体需求进行深入学习和应用。 此外,在Vs Qt案例进阶中,还可以学习如何对Qt进行定制和扩展。Qt提供了非常完善的工具和框架,支持开发者根据自己的需求进行定制和扩展,例如可以创建自定义的Qt控件、编写自己的Qt库等等,通过学习和应用这些内容,可以进一步提高Qt应用程序的质量和性能。 总之,Vs Qt案例进阶是一个不断深入学习和应用Qt的过程,通过充分利用Visual Studio和Qt框架的功能和特性,可以更好地开发出高质量、跨平台的应用程序。对于开发者来说,掌握这些内容可以提高开发效率,增强开发能力,并且在职业发展中具有更大的竞争优势。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值