Qt 多窗口界面设计 - 使用 QSplitter 和 QStackedWidget 实现

本示例展示如何使用 Qt 的 QSplitter 和 QStackedWidget 组件构建多窗口界面,并通过列表控件控制不同窗口的显示。

代码示例:

#include <widget.h>
#include <QApplication>
#include <QSplitter>
#include <QListWidget>
#include <QLayout>
#include <QStackedWidget>
#include <QPushButton>
#include "form1.h"
#include "form2.h"
#include "form3.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSplitter *a1 = new QSplitter(Qt::Horizontal);//主分割水平
    QListWidget *b = new QListWidget(a1);//左侧列表
    b->addItem('三角形的面积计算');
    b->addItem('矩形的面积计算');
    b->addItem('圆的面积计算');
    //创建右侧部分
    QWidget *p = new QWidget(a1);
    QVBoxLayout *c = new QVBoxLayout(p);
    QStackedWidget *c1 = new QStackedWidget;
    //水平布局
    QHBoxLayout *h = new QHBoxLayout;
    //QPushButton *ps = new QPushButton('修改');
    QPushButton *ps1 = new QPushButton('关闭');
    //QObject::connect(ps1, &QPushButton::clicked, &w, &QWidget::close);
    QObject::connect(ps1, &QPushButton::clicked, &a, &QApplication::quit);//槽函数关闭窗口

    //h->addWidget(ps);
    h->addWidget(ps1);
    h->setAlignment(Qt::AlignRight);
    //把右侧的放入垂直
    c->addWidget(c1);
    c->addLayout(h);
    //w.show();
    //使用Qt界面类创建层叠
    Form1 *d = new Form1;
    Form2 *d1 = new Form2;
    Form3 *d2 = new Form3;
    c1->addWidget(d);//将页面加入层叠
    c1->addWidget(d1);
    c1->addWidget(d2);
    QObject::connect(b, &QListWidget::currentRowChanged, c1, &QStackedWidget::setCurrentIndex);//利用槽函数点击列表对应跳转
    a1->show();//展示
    return a.exec();
}

系统模块图:

+--------------------------------------------------------+
|                          main                          |
+--------------------------------------------------------+
                             |
                             |
                             |
                             |
            +--------------------------------+
            |            QApplication         |
            +--------------------------------+
                             |
                             |
                             |
                             |
     +-----------------------+------------------------+
     |                                               |
     |                                               |
+----+-----------------------+             +---------+--------------+
|        QSplitter           |             |     QListWidget       |
+-----------------------------+             +-----------------------+
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|         QWidget             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
+-----------------------------+             +-----------------------+
     |                                               |
     |                                               |
+----+-----------------------+             +---------+--------------+
|      QVBoxLayout           |             |  QStackedWidget       |
+-----------------------------+             +-----------------------+
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|          QHBoxLayout       |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
+-----------------------------+             +-----------------------+
     |                                               |
     |                                               |
+----+-----------------------+             +---------+--------------+
|            Form1           |             |       Form2           |
+-----------------------------+             +-----------------------+
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
+-----------------------------+             +-----------------------+
     |                                               |
     |                                               |
+----+-----------------------+             +---------+--------------+
|            Form3           |             |      QPushButton      |
+-----------------------------+             +-----------------------+
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
|                             |             |                       |
+-----------------------------+             +-----------------------+

代码解释:

  1. 使用 QSplitter 创建水平分割的窗口。
  2. 左侧使用 QListWidget 显示不同的计算选项。
  3. 右侧使用 QWidget 作为容器,并使用 QVBoxLayout 进行垂直布局。
  4. 使用 QStackedWidget 创建层叠窗口,用于放置不同的计算窗口。
  5. 使用 QHBoxLayout 创建水平布局,放置关闭按钮。
  6. 创建 Form1Form2Form3 窗口,并添加到 QStackedWidget 中。
  7. 使用 QObject::connectQListWidgetcurrentRowChanged 信号连接到 QStackedWidgetsetCurrentIndex 槽函数,实现点击列表选项切换窗口的功能。

注意:

  • Form1Form2Form3 窗口需要根据实际需求编写相关代码。
  • 可以根据需要添加其他功能,例如修改按钮等。

总结:

本示例演示了使用 Qt 的 QSplitter 和 QStackedWidget 组件实现多窗口界面设计的简单方法。通过这种方法,可以方便地构建具有不同功能的窗口,并通过列表控件实现窗口之间的切换。

Qt 多窗口界面设计 - 使用 QSplitter 和 QStackedWidget 实现

原文地址: https://www.cveoy.top/t/topic/oLEN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录