今天在使用窗体分割的时候,用到了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控件,这个无关