今天在使用窗体分割的时候,用到了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控件,这个无关
FROM: http://blog.csdn.net/envenler/article/details/7942470