- 需求:在TabWidget中布置控件过多,且布局设计页面中tab子页面一直自动切换不方便操作;
- 实现:另外插入.ui文件及对应的h/cpp文件,注意选择widget,把设计的页面当做控件使用;
- 把设计的widget插入tabwidget的tab页中一是把tab子页当做父亲
widget = new QWidget(tab);
二是 在tab叶中先插入布局,然后使用verticalLayout->addWidget(widget);
- 我这里采用两者结合,先在tab叶的 ui 中放入虚拟布局,然后 再使用 addWidget 函数
- 我们在使用布局ui时通常是先放入所有控件,然后进行一一布局,但是在使用代码布局时,首先要确定的就是布局,然后再往布局塞控件,我的理解是,想使用代码布局,首先要“胸有成竹”;
- 当ui文件作为控件插入到别的界面时,无需设置无边框
setWindowFlags(Qt::FramelessWindowHint);//无边框
,系统自动去边框(已验证)。
1 UI文件
1.1 mainwindow.ui
主界面放一个tabWidget,分别放入两个tab页,每个tab页中放入一个verticalLayout;
1.2 子界面ui
两个子界面均放入一个label和一个弹簧(verticalSpacer),为了区分,一个放在上面,一个放下面;
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 运行截图
(设置了渐变色,还挺好看O.o)
- Qt练习时长两年半,接qt,C++兼职,课设,指导等;
- VX:QAQ2333oooo
- QQ:1580947517