TabWidget中插入ui文件子界面作为 tab的子页

  • 需求:在TabWidget中布置控件过多,且布局设计页面中tab子页面一直自动切换不方便操作;
  • 实现:另外插入.ui文件及对应的h/cpp文件,注意选择widget,把设计的页面当做控件使用;
  1. 把设计的widget插入tabwidget的tab页中一是把tab子页当做父亲widget = new QWidget(tab); 二是 在tab叶中先插入布局,然后使用verticalLayout->addWidget(widget);
  2. 我这里采用两者结合,先在tab叶的 ui 中放入虚拟布局,然后 再使用 addWidget 函数
  3. 我们在使用布局ui时通常是先放入所有控件,然后进行一一布局,但是在使用代码布局时,首先要确定的就是布局,然后再往布局塞控件,我的理解是,想使用代码布局,首先要“胸有成竹”;
  4. 当ui文件作为控件插入到别的界面时,无需设置无边框 setWindowFlags(Qt::FramelessWindowHint);//无边框,系统自动去边框(已验证)。

1 UI文件

1.1 mainwindow.ui

​ 主界面放一个tabWidget,分别放入两个tab页,每个tab页中放入一个verticalLayout;

mainwindow.ui

1.2 子界面ui

​ 两个子界面均放入一个label和一个弹簧(verticalSpacer),为了区分,一个放在上面,一个放下面;
SubWidget_2
SubWidget_2.ui

2 头文件

2.1 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "SubWidget_1.h"
#include "SubWidget_2.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

2.2 SubWidget_1.h

#ifndef SUBWIDGET_1_H
#define SUBWIDGET_1_H

#include <QWidget>

namespace Ui {
class SubWidget_1;
}

class SubWidget_1 : public QWidget
{
    Q_OBJECT

public:
    explicit SubWidget_1(QWidget *parent = nullptr);
    ~SubWidget_1();

private:
    Ui::SubWidget_1 *ui;
};

#endif // SUBWIDGET_1_H

2.3 SubWidget_2.h

#ifndef SUBWIDGET_2_H
#define SUBWIDGET_2_H

#include <QWidget>

namespace Ui {
class SubWidget_2;
}

class SubWidget_2 : public QWidget
{
    Q_OBJECT

public:
    explicit SubWidget_2(QWidget *parent = nullptr);
    ~SubWidget_2();

private:
    Ui::SubWidget_2 *ui;
};

#endif // SUBWIDGET_2_H

3 源文件

3.1 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    SubWidget_1 *s1 = new SubWidget_1(this);
    ui->verticalLayout_1->addWidget(s1);

    SubWidget_2 *s2 = new SubWidget_2(ui->tab_2);
    ui->verticalLayout_2->addWidget(s2);
}

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


3.2 `SubWidget_1.cpp

#include "SubWidget_1.h"
#include "ui_SubWidget_1.h"

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

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

3.3 SubWidget_2.cpp

#include "SubWidget_2.h"
#include "ui_SubWidget_2.h"

SubWidget_2::SubWidget_2(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SubWidget_2)
{
    ui->setupUi(this);
//    setWindowFlags(Qt::FramelessWindowHint);//无边框 不起作用
}

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

3.4 main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

4 运行截图

运行截图1
(设置了渐变色,还挺好看O.o)
运行截图2

  • Qt练习时长两年半,接qt,C++兼职,课设,指导等;
  • VX:QAQ2333oooo
  • QQ:1580947517
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花乾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值