您的位置:首页 > 编程语言 > Qt开发

QT实现界面跳转切换

2014-06-23 16:15 357 查看

简介

Qt图形应用中经常会遇到从一个界面跳转到另一个界面应用,这里简单介绍一种使用信号-槽机制实现的界面跳转方案。创建one,two, three三个图像界面类,每一个界面类中实现一个信号函数,在按钮的槽函数中发送该信号, 使用QStackedLayout存放所有的界面,在主窗口使用connect将信号和QStackedLayout::setCurrentIndex关联起来。

界面one

界面one图形如下:



one.h

#ifndef ONE_H
#define ONE_H

#include <QWidget>

class Two;

namespace Ui {
class One;
}

class One : public QWidget
{
Q_OBJECT

public:
explicit One(QWidget *parent = 0);
~One();

signals:
void display(int number);

private slots:
void on_nextPushButton_clicked();

private:
Ui::One *ui;
Two *two;
};

#endif // ONE_H


one.cpp

#include "one.h"
#include "ui_one.h"
#include "two.h"
#include "widget.h"

One::One(QWidget *parent) :
QWidget(parent),
ui(new Ui::One)
{
ui->setupUi(this);

}

One::~One()
{
delete ui;
}

void One::on_nextPushButton_clicked()
{
emit display(1);
}


界面two

界面two图形如下:



two.h

#ifndef TWO_H
#define TWO_H

#include <QWidget>

namespace Ui {
class Two;
}

class Two : public QWidget
{
Q_OBJECT

public:
explicit Two(QWidget *parent = 0);
~Two();

signals:
void display(int number);

private slots:
void on_previousPushButton_clicked();

void on_nextPushButton_clicked();

private:
Ui::Two *ui;
};

#endif // TWO_H


two.cpp

#include "two.h"
#include "ui_two.h"

Two::Two(QWidget *parent) :
QWidget(parent),
ui(new Ui::Two)
{
ui->setupUi(this);
}

Two::~Two()
{
delete ui;
}

void Two::on_previousPushButton_clicked()
{
emit display(0);
}

void Two::on_nextPushButton_clicked()
{
emit display(2);
}


界面three

界面three图形如下:



three.h

#ifndef THREE_H
#define THREE_H

#include <QWidget>

namespace Ui {
class Three;
}

class Three : public QWidget
{
Q_OBJECT

public:
explicit Three(QWidget *parent = 0);
~Three();

signals:
void display(int number);

private slots:
void on_previousPushButton_clicked();

private:
Ui::Three *ui;
};

#endif // THREE_H


three.cpp

#include "three.h"
#include "ui_three.h"

Three::Three(QWidget *parent) :
QWidget(parent),
ui(new Ui::Three)
{
ui->setupUi(this);
}

Three::~Three()
{
delete ui;
}

void Three::on_previousPushButton_clicked()
{
emit display(1);
}


主界面

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class One;
class Two;
class Three;
class QStackedLayout;
class QVBoxLayout;

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

private:
One *one;
Two *two;
Three *three;
QStackedLayout *stackLayout;
QVBoxLayout *mainLayout;
};

#endif // WIDGET_H


widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "one.h"
#include "two.h"
#include "three.h"
#include <QStackedLayout>
#include <QPushButton>
#include <QVBoxLayout>

Widget::Widget(QWidget *parent) :
QWidget(parent)
{
setFixedSize(400, 300);
one = new One;
two = new Two;
three = new Three;
stackLayout = new QStackedLayout;
stackLayout->addWidget(one);
stackLayout->addWidget(two);
stackLayout->addWidget(three);
connect(one, &One::display, stackLayout, &QStackedLayout::setCurrentIndex);             // 0
connect(two, &Two::display, stackLayout, &QStackedLayout::setCurrentIndex);             // 1
connect(three, &Three::display, stackLayout, &QStackedLayout::setCurrentIndex);       // 2

mainLayout = new QVBoxLayout;
mainLayout->addLayout(stackLayout);
setLayout(mainLayout);

}

Widget::~Widget()
{
}


main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();

return a.exec();
}


注:源代码下载地址http://download.csdn.net/detail/tj807126663/7540203
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: