QSplitter在QTabWidget中使用

今天在使用窗体分割的时候,用到了QSplitter这个控件,初次使用在网上找了个例子,但是例子非常之简单。当然普通的使用肯定是满足的,我是使用在QTabWidget控件中和mainwindow中。在mainwindow中使用是没有问题的,但是在QTabWidget中问题就出现了。

刚开始试了好多次,在QTabWidget中添加QSplitter控件都出现了排版的问题,主要为:里面的其他控件不能随窗体放大,不能填充窗体。试了在QTabWidget中添加各类布局,结果:无效。然后我就想应该是和控件的父子Widget有关系,我们必须把里面的层次弄清楚。

mainwindow.h代码如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSplitter>
#include <QHBoxLayout>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;
    QSplitter *hspliter;        //QTabWidget中的水平分割
    QSplitter *vspliter;        //mainwindow中的竖直分割
    QHBoxLayout *tab_h_layout;  //QTabWidget中的tab的layout
};

#endif // MAINWINDOW_H

mainwindow.cpp代码如下:

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

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

    tab_h_layout = new QHBoxLayout;
    ui->tab->setLayout(tab_h_layout);//手动设置layout

    hspliter = new QSplitter(Qt::Horizontal,ui->tab);//设置水平分割,和它的父控件
    vspliter = new QSplitter(Qt::Vertical);

    hspliter->addWidget(ui->tableView);
    hspliter->addWidget(ui->tableView_2);
    hspliter->setStretchFactor(1,1);

    vspliter->addWidget(ui->tabWidget);
    vspliter->addWidget(ui->tableView_3);
    vspliter->setStretchFactor(0,21);
    vspliter->setStretchFactor(1,1);

    tab_h_layout->addWidget(hspliter);

    this->setCentralWidget(vspliter);
}

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

程序截图:

ui中显示效果:


层次结构:


运行效果:都是用QTableView控件,这个无关


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值