Qt布局管理器综合实例

1、布局管理器的综合实例------模拟向导用户界面(Windows平台)

-----练习开发一个向导用户界面

@1:在同一界面上展现不同的向导页面

@2:通过上一步和下一步按钮进行切换

@3:不同页面上的元素组件和这些组件排布都不相同

@4:页面中的组件通过布局管理进行排布

(1)通过布局嵌套进行界面设计

@1:上一步和下一步这两个按钮用水平布局管理器QHBoxLayout来进行管理,不同页面上的显示的内容只有按钮不变,所以讲不同页面的内容用栈式布局管理器QStackedLayout进行管理,这样

在切换不能页面的时候,就相当于切换栈式布局管理器中的栈顶组件。之后用垂直布局管理器QVBoxLayout将这个栈式布局管理器和水平布局管理器进行管理,就达到了目的要求了

@2:通过QStackedLayout栈式布局管理器管理不同的页面。每一个页面都是一个QWidget的组件,每一个Qwidget组件中的内容都是不一样的,每一个QWidget组件作为一个容器,这个容器

中都有一个布局管理器或多个布局管理器

2、注意事项:

(1)任意容器类的组件都可以指定布局管理器

(2)同一布局管理器中的组件拥有相同的父组件

(3)设置布局管理器的同时也隐式的指定了父子关系了

(4)组件间的父子关系是Qt中内存管理的重要方式

/************************************************************.h代码************************************************************************/

#ifndef _WIDGET_H_

#define _WIDGET_H_

#include <QtGui/QWidget>

#include <QPushButton>

#include <QVBoxLayout>

#include <QHBoxLayout>

#include <QStackedLayout>

#include <QLabel>

#include <QLineEdit>

#include <QFormLayout>

class Widget : public QWidget

{

Q_OBJECT

private:

QPushButton preButton;

QPushButton nextButton;

QLabel label1;  //标签

QLabel label2;

QLabel label3;

QLabel label4;

QLineEdit LineEdit1;

QLineEdit LineEdit2;

QPushButton button1;

QPushButton button2;

QStackedLayout slayout;  //定义一个栈式布局管理器,在类中定义以便后面的成员函数访问方便

void init();    //用来初始化构造界面的

QWidget *get_Frist_Widget();    //打造QStackedLayout栈式布局管理器的第1页面的函数

QWidget *get_Second_Widget();   //打造QStackedLayout栈式布局管理器的第2页面的函数

QWidget *get_Thrid_Widget();    //打造QStackedLayout栈式布局管理器的第3页面的函数

private slots:

void PreButtonClicked();

void NextButtonClicked();

public:

Widget(QWidget *parent = 0);

~Widget();

};

#endif // _WIDGET_H_

/*******************************************************.cpp的代码*************************************************************************/

#include "widget.h"

Widget::Widget(QWidget *parent)

: QWidget(parent), preButton(this), nextButton(this)

{

init();

}

void Widget::init()

{

QVBoxLayout *vlayout = new QVBoxLayout();    //创建一个垂直布局管理器

QHBoxLayout *hlayout = new QHBoxLayout();    //创建一个水平布局管理器

preButton.setText("Pre Page");

preButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);    //设置改按钮行为扩展,列为固定,有布局管理器时起作用

preButton.setMinimumSize(160, 30);  //设置该按钮最小为160*30像素

nextButton.setText("Next Page");

nextButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);    //设置改按钮行为扩展,列为固定,有布局管理器时起作用

nextButton.setMinimumSize(160, 30);  //设置该按钮最小为160*30像素

connect(&preButton, SIGNAL(clicked()), this, SLOT(PreButtonClicked()));

connect(&nextButton, SIGNAL(clicked()), this, SLOT(NextButtonClicked()));

hlayout->addWidget(&preButton); //水平布局管理器管理按钮

hlayout->addWidget(&nextButton);

slayout.addWidget(get_Frist_Widget());     //将写好的不同QWiget组件页面添加到QStackedLayout栈式布局管理器中管理。 0

slayout.addWidget(get_Second_Widget());    // 1

slayout.addWidget(get_Thrid_Widget());     // 2

vlayout->addLayout(&slayout);    //让这个垂直布局管理器管理这个水平布局管理器

vlayout->addLayout(hlayout);    //让这个垂直布局管理器管理这个栈式布局管理器

slayout.setCurrentIndex(0);    //设置当前栈式布局管理器中显示的组件是第1个

this->setLayout(vlayout);   //设置当前窗口的布局管理器为vlayout这个垂直布局管理器

}

QWidget* Widget::get_Frist_Widget()    //打造QStackedLayout栈式布局管理器的第1页面的函数

{

QWidget *ret = new QWidget();

QGridLayout *layout = new QGridLayout();    //网格管理形式的布局管理器

label1.setText("WuHengYi");         //设置标签的内容

label2.setText("FangQingQing");

label3.setText("I LOVE YOU");

label4.setText("Forever");

layout->addWidget(&label1, 0, 0);   //设置标签在0,0这个格子的位置

layout->addWidget(&label2, 0, 1);

layout->addWidget(&label3, 1, 0);

layout->addWidget(&label4, 1, 1);

ret->setLayout(layout);     //将要返回的这个QWidget容器组件中的布局管理器设置为layout

return ret;

}

QWidget* Widget::get_Second_Widget()   //打造QStackedLayout栈式布局管理器的第2页面的函数

{

QWidget *ret = new QWidget();

QFormLayout *layout = new QFormLayout();    //表单形式的布局管理器

LineEdit1.setText("So care about you");

LineEdit2.setText("FangQingQing");

layout->addRow("who:", &LineEdit1); //设置表单,前面一个参数是标签,后面一个是编辑框,两者是相互对应的。不会随着窗口变,两者距离变

layout->addRow("Love to:", &LineEdit2);

ret->setLayout(layout);     //将要返回的这个QWidget容器组件中的布局管理器设置为layout

return ret;

}

QWidget* Widget::get_Thrid_Widget()    //打造QStackedLayout栈式布局管理器的第3页面的函数

{

QWidget *ret = new QWidget();

QVBoxLayout *layout = new QVBoxLayout();

button1.setText("this is");

button2.setText("family");

layout->addWidget(&button1);    //将按钮1添加到这个垂直布局管理器中

layout->addWidget(&button2);

ret->setLayout(layout);

return ret;

}

//点击这个按钮,到上一个页面(QStackedLayout布局管理器管理的组件)

void Widget::PreButtonClicked()

{

int index = ((slayout.currentIndex() - 1) + 3) % 3; //因为显示上一个页面,-1怕减多了,因为3个页面(QWidget),所以+3对3取余

slayout.setCurrentIndex(index); //显示上一个页面

}

void Widget::NextButtonClicked()

{

int index = (slayout.currentIndex() + 1) % 3; //因为显示下一个页面, 因为3个页面(QWidget),所以+1对3取余

slayout.setCurrentIndex(index); //显示下一个页面

}

Widget::~Widget()

{

}

/*****************************************************************main.cpp**************************************************************/

#include <QtGui/QApplication>

#include "widget.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

Widget w;

w.show();

return a.exec();

}

时间: 2024-10-23 01:30:37

Qt布局管理器综合实例的相关文章

QT开发(二十一)——QT布局管理器

QT开发(二十一)--QT布局管理器 一.布局管理器简介 QT中使用绝对定位的布局方式无法自适应窗口的变化. QT中提供了对界面组件进行布局管理的类,用于对界面组件进行管理,能够自动排列窗口中的界面组件,窗口大小变化后自动更新界面组件的大小. QLayout是QT中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器. 布局管理器不是界面组件,而是界面组件的定位策略. 任意容器类型的组件都可以指定布局管理器. 同一个布局管理器管理中的组件拥有相同的父组件,在设置布局

Qt布局管理器的使用(二)

 Qt布局管理器的使用(二) 前面博文(http://blog.csdn.net/u013704336/article/details/38960353)讲解了手动布局的基本思路,今天说下用代码怎样进行一些常用的简单布局. 首先,心中要规划好,自己要实现的模块的分布可以事先在纸上进行大致的绘制,然后心中就有了大致的轮廓. 今天就按照上次讲的,实现那个录入商品信息的布局吧.如下图所示: 仔细观察,就可以发现这个布局的思想.基本都是水平布局,然后再将各自布局进行垂直布局,好了,说了这么多废话,直接上

Qt布局管理器(详解)

1.存在的问题 (1)目前的GUI开发方式:绝对定位 --直接在像素级指定各个组件的位置和大小 void QWidget::move(int x, int y) void QWidget::resize(int w, int h) (2)问题 --组件位置和大小无法自适应父窗口的变化 2.布局管理器 (1)解决方案:布局管理器 --提供相关的类对界面组件进行布局管理 @1:能够自动排列窗口中的界面组件 @2:窗口变化后自动更新界面组件的大小 (2)QLayout是Qt中布局管理器的抽象基类 (3

Qt 布局管理器

在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是我们不得不关注的一个重点了. 我们进入正题,今天主要和大家分享一下Qt方面关于布局管理器的使用: 一.基本概念   Qt 提供了几种在窗口部件上管理子窗口部件的基本方式.一共有3 种方法用于管理窗体上子窗口部件的布局:绝对位置法.人工布局法和布局管理器法.相比于使用固定尺寸和位置,布局提供了功能强大

Qt布局管理器的使用(一)

曾经对Qt的布局管理器掌握的还不清楚,今天特意学习了下.感觉收获还挺大的,特意拿出来和大家分享. 首先.要明确布局管理器的用处,及使我们的界面看起来比較整洁.美化.另外一点就是为了使我们的控件可以更随窗体的大小而变化,窗体大的时候它变大,窗体小的时候它变小. 一般写 好的软件都要能最大化.最小化,非常多时候当我们最大化后,发现控件还是原来的样子.非常难看,如今就不用发愁了,首先用手动布局实现.由于这个比較简单,并且非常直观. 首先贴一张我自己刚布好的局. 还算整洁.这张是它最初的大小,将它最大化

Qt——布局管理器

教程地址 运行截图: 代码: #include "mainwindow.h" #include <QApplication> #include <QHBoxLayout> #include <QWidget> #include <QSpinBox> #include <QObject> #include <QHBoxLayout> #include <QSlider> int main(int argc

Qt布局管理器

1.Qt提供的布局类以及他们之间的继承关系(如下图): Qt 常用的layout 有QHBoxLayout.QVBoxLayout.QGridLayout 常用的方法有addWidget()和addLayout().addWidget()用于在布局中插入控件,addLayout()用于在布局中插入子布局. 在布局管理中还常用到setMargin()用于设定边距,setSpacing()用于设定控件间距. setColumnStretch()用于设置列的占空比. QFormLayou null

Android布局管理器-从实例入手学习相对布局管理器的使用

场景 AndroidStudio跑起来第一个App时新手遇到的那些坑: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103797243 使用相对布局RelativeLayout实现简单的登录提示的布局,效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建之后的默认页面布局为 将其修改为Rela

Java之GUI编程(二)——布局管理器

在上篇博客Java之GUI编程(一)中我已经对GUI编程的组件和事件做了简单介绍了,现在来看看另外一部分关于组件在各个平台是如何做到仍能保持自己合理的位置大小以及外观的. 已经说了Java是跨平台运行的,但是不同的平台对于点及坐标的定义不完全相同.而且屏幕的解析度分辨率不同也会造成位置的变化,为了确保每个组件的相对位置和大小以及外观,java就设计了布局管理器. 布局管理器是对容器中的元素进行管理,按照一定的规则排放容器里面的元素.它控制了组件的摆放. 布局管理器分类: FlowLayout:浮