效果如下
在一个位置管理多个界面的切换关键类:QTabWidget
QTabWidget m_tabWidget;//关键对象
界面一,绘制文本编辑对象
QPlainTextEdit* edit = new QPlainTextEdit(&m_tabWidget);界面二,普通窗口对象
QWidget* widget = new QWidget(&m_tabWidget);
将两个界面添加到m_tabWidget管理
m_tabWidget.addTab(edit, “1st”); //切换按钮上显示1st
m_tabWidget.addTab(widget, “2nd”); //切换按钮上显示2nd
设置当前一开始要执行的界面
比如显示界面1
m_tabWidget.setCurrentIndex(1); //一个界面对应一个索引号index
如果要在切换的过程中执行动作:槽函数,信号1 currentChanged(int)
这个信号是当前界面发生改变时
关闭一个界面:槽函数 信号2 tabCloseRequested(int)
当点击切换按钮上的叉叉时发送的信号
下面是整个工程代码
/*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();
}
/*Widget.cpp*/
#include "Widget.h"
#include <QPlainTextEdit>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
m_tabWidget.setParent(this);
m_tabWidget.move(10, 10);
m_tabWidget.resize(200, 200);
m_tabWidget.setTabPosition(QTabWidget::South);
m_tabWidget.setTabShape(QTabWidget::Triangular);
m_tabWidget.setTabsClosable(true);
/*界面一设计*/
QPlainTextEdit* edit = new QPlainTextEdit(&m_tabWidget);
edit->insertPlainText("1st Tab Page");
m_tabWidget.addTab(edit, "1st");
/*界面二设计*/
QWidget* widget = new QWidget(&m_tabWidget);
QVBoxLayout* layout = new QVBoxLayout(); //定义一个垂直布局管理器
QLabel* lbl = new QLabel(widget);
QPushButton* btn = new QPushButton(widget);
lbl->setText("2nd Tab Page");
lbl->setAlignment(Qt::AlignCenter);
btn->setText("2nd Tab Page");
layout->addWidget(lbl);
layout->addWidget(btn); //布局管理器管理 一个文本标签和一个按钮
widget->setLayout(layout);
m_tabWidget.addTab(widget, "2nd");
m_tabWidget.setCurrentIndex(1); //显示界面一
connect(&m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(onTabCurrentChanged(int))); //槽函数链接
connect(&m_tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(onTabCloseRequested(int)));
}
void Widget::onTabCurrentChanged(int index)
{
qDebug() << "Page change to: " << index; //打印当且界面索引号
}
void Widget::onTabCloseRequested(int index)
{
m_tabWidget.removeTab(index);
}
Widget::~Widget()
{
}
/*Widget.h*/
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QTabWidget>
class Widget : public QWidget
{
Q_OBJECT
QTabWidget m_tabWidget; //关键类,管理界面
protected slots:
void onTabCurrentChanged(int index); //槽函数
void onTabCloseRequested(int index);
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_H