qt5-入门-组件布局

参考:
Qt学习之路_w3cschool
C++ GUI Programming with Qt 4, Second Edition

本地环境:
win10专业版,64位


基础

绝对定位:给出确切的坐标值和尺寸,缺点是当用户改变窗口大小时,需要写函数响应变化(或者禁止用户改变大小)

布局:只要把组件放入一种布局中,当窗口大小变化时,Qt自动调整布局(有点类似wpf的grid)

  • QHBoxLayout:水平方向,从左到右布局
  • QVBoxLayout:竖直方向,从上到下布局
  • QGridLayout:在网格中布局,类似HTML的table
    同时,布局可以嵌套。

例子

左右两栏

假设需要在窗口放一个进度条和一个可以上下调整的数字输入框,进度条和输入框双向绑定,调整一个,另一个随之调整。

这里使用Qt自带的控件:QSlider和QSpinBox,代码如下,注释很清楚。

#include "mainwindow.h"
#include <QApplication>
#include <QWidget>
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    // 新建窗口
    QWidget *window = new QWidget;
    window->setWindowTitle("Enter ur age");
    // spinbox是可以调大小的空间
    QSpinBox *spinBox = new QSpinBox;
    // 创建一个水平向的进度条
    QSlider *slider = new QSlider(Qt::Horizontal);
    // 设置spinbox的数据范围
    spinBox->setRange(0, 130);
    slider->setRange(0, 130);
    // 写槽函数
    // slider的数值变化时,spinBox的值会对应变化(响应)
    QObject::connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));
    // spinBox的数值变化时,slider的值也会对应变化(响应)
    QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
    // 设置初始值
    spinBox->setValue(35);
    // 布局
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(spinBox);
    layout->addWidget(slider);
    window->setLayout(layout);
    // 展示
    window->show();

    return a.exec();
}

效果:
在这里插入图片描述
在这里插入图片描述
需要注意的是,两个connect并不会无限递归。比如当spinBox的值被改成50时,它因为值发生变化,发出valueChanged信号,slider接收信号后,回调自己的setValue函数,将自己的值改成50;因为slider的值变化了,所以也发出valueChanged信号,此时spinBox接收到,但是因为跟自己的值一样,所以不再发出信号。

嵌套布局

假设想要一个查找框,类似下图所示:
在这里插入图片描述
那么布局的时候可以考虑做如下的划分:mainLayout分左右两栏(水平布局),左栏(leftLayout)是一个竖直布局,第一行是一个水平布局(topLeftLayout),放标签和输入框;第二行和第三行放checkbox。mainLayout的右栏(rightLayout)是一个竖直布局,先放两个按钮,然后放一个spacer做空间填充,这个填充的效果是让两个按钮自动停在顶部。
在这里插入图片描述
代码如下:

QHBoxLayout *topLeftLayout = new QHBoxLayout;
topLeftLayout->addWidget(label);
topLeftLayout->addWidget(lineEdit);

QVBoxLayout *leftLayout = new QVBoxLayout;
leftLayout->addLayout(topLeftLayout);
leftLayout->addWidget(caseCheckBox);
leftLayout->addWidget(backwardCheckBox);

QVBoxLayout *rightLayout = new QVBoxLayout;
rightLayout->addWidget(findButton);
rightLayout->addWidget(closeButton);
rightLayout->addStretch(); // 就是spacer

QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);
setLayout(mainLayout);
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt5编程入门PDF是一本介绍Qt5编程的入门教程,适合初学者学习Qt5编程的人使用。Qt是一个跨平台的应用程序开发框架,能够帮助开发者快速构建高质量的应用程序。Qt5Qt框架的最新版本,引入了许多新的特性和改进。 这本PDF详细介绍了Qt5的基本知识和常用功能,包括Qt5的安装、配置开发环境、Qt Creator的使用、界面设计、信号和槽、布局管理、控件的使用等等。通过阅读这本教程,读者可以了解Qt5编程的基本概念和技巧,并且能够使用Qt5开发简单的应用程序。 这本PDF的优点是语言简洁明了,图文并茂,易于理解和学习。它循序渐进地引导读者学习Qt5编程,并提供了大量的实例代码和练习题,读者可以通过实践来加深对知识点的理解和掌握。 对于想要学习Qt5编程的初学者来说,这本PDF是一个很好的起点。它为读者提供了一个系统而全面的学习路径,帮助他们逐步掌握Qt5编程的基础知识和技能。同时,这本PDF也可以作为Qt5编程的参考手册,在开发过程中随时查阅和借鉴。 总之,Qt5编程入门PDF是一个值得推荐的学习资源,无论是想要入门Qt5编程的初学者,还是想要提升Qt5编程技能的开发者,都可以从中获得帮助和收益。 ### 回答2: 《Qt5编程入门》是一本针对Qt5编程初学者的入门教程,该教程使用中文进行讲解,可以帮助读者快速掌握Qt5编程的基础知识和技能。 首先,这本教程会介绍Qt5的基本概念和主要特点,让读者对Qt有一个整体的了解。然后,教程会详细介绍Qt的安装和配置,包括如何在不同的开发平台上安装Qt以及如何配置开发环境。 接着,教程会逐步介绍Qt的主要组件和功能,包括窗口、控件、布局、信号与槽等等。读者将学习如何使用这些组件和功能来开发基于Qt的应用程序。 此外,教程还会涉及到Qt的绘图、动画、多线程等高级功能,帮助读者进一步提升自己的Qt编程水平。同时,教程也会介绍一些实际的应用案例,让读者了解如何将Qt应用于实际项目开发中。 最后,教程会提供一些实践项目和练习题,让读者通过实际动手操作来巩固所学知识。通过完成这些项目和练习,读者能够更好地理解和掌握Qt编程的技巧和流程。 总之,如果你对Qt5编程感兴趣并且想要快速入门,我推荐你阅读《Qt5编程入门》这本书。通过学习这本教程,你将能够系统地学习和掌握Qt5编程的基础知识和技能,为以后的Qt项目开发打下坚实的基础。 ### 回答3: Qt5编程入门 PDF是一本适合初学者入门的编程书籍,主要介绍了Qt5的基础知识和编程技巧。该书以PDF格式出版,方便读者进行电子阅读和学习。 这本书首先介绍了Qt5的基本概念和特点,包括Qt的模块、类体系结构和信号槽机制等。然后详细介绍了Qt的核心模块,如窗口部件、图形视图、布局管理器等,以及常用的辅助模块,如文件系统、网络、多线程等。每个模块都结合实例进行讲解,帮助读者理解和掌握Qt5的各种功能和用法。 此外,本书还有一些实践项目,供读者练习和巩固所学知识。通过这些项目的实践,读者可以更好地了解Qt5的应用场景和开发流程。书中也提供了一些实用技巧和调试方法,帮助读者更轻松地解决问题和提高编程效率。 这本书的优点是内容翔实、结构清晰,对于初学者来说很友好。同时,书中还提供了丰富的示例代码和图表,帮助读者更直观地理解和运用所学知识。另外,该书还提供了一些扩展阅读和学习资源,让读者在掌握基础后可以进一步扩展自己的知识和技能。 总之,Qt5编程入门 PDF是一本很实用的编程入门书籍,适合想要学习Qt5编程的初学者阅读和学习。通过阅读这本书,读者可以系统地学习和掌握Qt5的基础知识和编程技巧,为以后的Qt5开发奠定坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值