初识Qt布局管理器
Qt布局管理器的类有4种,它们分别为QHBoxLayout、QVBoxLayout、QGridLayout和QStackLayout。其中,QHBoxLayout实现水平布局,QVBoxLayout实现竖直布局,QGridLayout实现表格布局,QStackLayout实现分组布局。通过对这几种布局的嵌套组合,就可以实现复杂的对话框设计。
先看一个实现组件竖直布局的例子。
#include <QApplication>
#include<QLabel>
#include<QPushButton>
#include<QHBoxLayout>
#include<QSlider>
#include<QSpinBox> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel*w=new QLabel("<h2><i>Hello</i><font color=red> World!</font></h2>");
//QLabel*w=new QLabel("Hello World!");
QWidget *window=new QWidget;
window->setWindowTitle("Enter Your Age"); QPushButton *button=new QPushButton("Quit");
QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()) ); QSpinBox *spinbox = new QSpinBox;
QSlider *slider = new QSlider(Qt :: Horizontal);//(Qt::Vertical); 滑动条的摆放方式选择,水平还是竖直
spinbox->setRange( , );
slider->setRange( , ); QObject::connect(spinbox , SIGNAL(valueChanged(int)) , slider , SLOT( setValue(int)));
QObject::connect(slider , SIGNAL(valueChanged(int)) , spinbox , SLOT( setValue(int))); spinbox->setValue(); //QHBoxLayout为水平方摆放接下来的控件,QVBoxLayout为竖直摆放接下来的控件
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(w);
layout->addWidget(spinbox);//addWidget()虽定义自类QHBoxLayout,但属于QHBoxLayout继承于类QLayout的函数
layout->addWidget(slider);
layout->addWidget(button); window->setLayout(layout);
window->show(); return a.exec();
}
该程序比较简单,主要实现了hello world的显示、Spinbox和Slider之间的相互赋值(Qt的信号槽机制)、竖直布局以及PushButton的简单使用,运行程序,显示如下:
现实中应用到的对话框不仅仅是单一的布局,而是牵涉到水平布局和竖直布局的综合使用,下面通过一段程序来理解如何实现水平布局和竖直布局的嵌套使用。
#include <QApplication>
#include<QLabel>
#include<QPushButton>
#include<QHBoxLayout>
#include<QSlider>
#include<QSpinBox> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel*w=new QLabel("<h2><i>Hello</i><font color=red> World!</font></h2>");
//QLabel*w=new QLabel("Hello World!");
QWidget *window=new QWidget;
window->setWindowTitle("Enter Your Age"); QPushButton *button=new QPushButton("Quit");
QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()) ); QSpinBox *spinbox = new QSpinBox;
QSlider *slider = new QSlider(Qt :: Horizontal);//(Qt::Vertical); 滑动条的摆放方式选择,水平还是竖直
spinbox->setRange( , );
slider->setRange( , ); QObject::connect(spinbox , SIGNAL(valueChanged(int)) , slider , SLOT( setValue(int)));
QObject::connect(slider , SIGNAL(valueChanged(int)) , spinbox , SLOT( setValue(int))); spinbox->setValue(); QHBoxLayout *belowleftlayout = new QHBoxLayout;
belowleftlayout->addWidget(spinbox);
belowleftlayout->addWidget(slider); QVBoxLayout *leftlayout = new QVBoxLayout;
leftlayout->addWidget(w);
leftlayout->addLayout(belowleftlayout); //注意这里用的是addLayout()函数 QVBoxLayout *rightlayout = new QVBoxLayout;
rightlayout->addStretch();// 伸展器,用来占据它所在布局过程中的空间
rightlayout->addWidget(button); QHBoxLayout *layout = new QHBoxLayout;
layout->addLayout(leftlayout);
layout->addLayout(rightlayout); window->setLayout(layout);
window->show(); return a.exec();
}
运行程序结果显示:
通过上图,我们实现了组件按照我们不同的要求进行的相应布局。由于在对右侧进行竖直布局时,添加伸展器Stretch,因此Quit按键位于右下角。
当注释掉rightlayout->addStretch();语句后,可以清楚的看到伸展器Stretch所起的作用。运行程序结果显示如下:

初识Qt布局管理器的更多相关文章
- 第六章 Qt布局管理器Layout
第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...
- Qt——布局管理器
教程地址 运行截图: 代码: #include "mainwindow.h" #include <QApplication> #include <QHBoxLay ...
- Qt 布局管理器
在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是 ...
- Qt布局管理器的使用(一)
曾经对Qt的布局管理器掌握的还不清楚,今天特意学习了下.感觉收获还挺大的,特意拿出来和大家分享. 首先.要明确布局管理器的用处,及使我们的界面看起来比較整洁.美化.另外一点就是为了使我们的控件可以更随 ...
- QT5每日一学(五)QT布局管理器
Qt中的布局管理器主要包括 QBoxLayout基本布局管理器 QGridLayout栅格布局管理器 QFormLayout窗体布局管理器 而基本布局管理器又分为QHBoxLayout水平布局管理器和 ...
- QT 布局管理器的使用
很多的时候,需要布局管理器的使用, 在此介绍一下布局管理器的使用,直接上代码 #include "widget.h" #include "ui_widget.h" ...
- Qt中的布局管理器
1. 布局管理器提供相关的类对界面组件进行布局管理,能够自动排列窗口中的界面组件,窗口变化后能自动更新界面组件的大小. 2. QLayout是Qt布局管理器的抽象基类,通过继承QLayout实现了功能 ...
- Qt 学习之路 2(11):布局管理器
Home / Qt 学习之路 2 / Qt 学习之路 2(11):布局管理器 Qt 学习之路 2(11):布局管理器 豆子 2012年9月4日 Qt 学习之路 2 70条评论 所谓 GUI 界 ...
- Qt之布局管理器
简述 Qt的布局系统提供了一个简单的和强有力的方式,来自动排列窗口子控件布局. 所有QWidget子类可以使用布局来管理他们的子控件.QWidget::setLayout()函数可以为一个控件布局.当 ...
随机推荐
- 不要在对抽象类接口abstract virtual什么的混淆不清了
(最近带一个新手入门 讲这边老费力了.) 接口和抽象类不过都是类的抽象罢了,这是他们的本质,只不过人们的思维角度不同而已,一个偏向为行为契约上的抽象(接口) 一个更像大自然中的繁衍关系(抽象类). 直 ...
- 第二十四天- 模块导入 import from xxx import xxx
# 模块:# 模块就是⼀个包含了python定义和声明的⽂件,⽂件名就是模块的名字加上.py后缀# 换句话说我们⽬前写的所有的py⽂件都可以看成是⼀个模块# 为何用模块:写大项目时,把相关的功能进⾏分 ...
- WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源
开篇 本篇文章主要是帮助刚开始接触CrystalReport报表的新手提供一个循序渐进的教程.该教程主要分为三个部分1)CrystalReport的基本使用方法:2)使用CrystalReport对数 ...
- css雪碧技术的用法。
---恢复内容开始--- 在目前前端开发阶段,页面会出现大量的小图片,服务器加载的时候比较吃力,怎么用 一种办法把图片都合并到一张图片上呢?这就用到了css雪碧技术. 雪碧技术是雪碧团队开发,也有人叫 ...
- ubuntu命令行编译opencv c++项目
ubuntu终端编译opencv c++项目: g++ test.cpp `pkg-config opencv --libs --cflags opencv` -o test
- oracle 用户创建、修改、删除
创建用户: create user test identified by test; 修改密码: 1.alter user test identified by mima; 2.passw[ord] ...
- Navicat Premium 连接MySQL数据库出现Authentication plugin 'caching_sha2_password' cannot be loaded的解决方案
1. 管理员权限运行命令提示符,登陆MySQL mysql -u root -p root 2. 修改账户密码加密规则并更新用户密码 ALTER USER 'root'@'localhost' ID ...
- 由delete导致的超时已过期问题
1. 问题 开发人员反映应用程序中一条简单的delete语句执行报“超时已过期”错误.delete语句形式如下: delete * from table_1 where id=@value 2. 分析 ...
- Entity Framework对同一张表配置一对多关系
在实际的项目开发中,可能会遇到同一张表同时保存自身和上级(或下级)的信息(一般是通过设置一个上级主键[ParentId]的列与主键[Id]关系) 例如:城市库,有国家.省.市...,省的ParentI ...
- UITextField使用的一些细节
UITextField使用的一些细节 这篇博文是我自己使用UITextField的一些总结,并没有太多营养,并会持续更新. 2014.9.15 ---------------------------- ...