效果如下
在这里插入图片描述
在这里插入图片描述

在一个位置管理多个界面的切换关键类: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
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐