qt linux界面布局,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

#include

#include

#include

#include

#include

#include

#include

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

#include "widget.h"

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

{

QApplication a(argc, argv);

Widget w;

w.show();

return a.exec();

}

你可能感兴趣的:(qt,linux界面布局)