QSplitter在QTabWidget中使用

来源:互联网 发布:androis中的js调试 编辑:程序博客网 时间:2024/05/17 06:26

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

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

mainwindow.h代码如下:

[cpp] view plain copy
  1. #ifndef MAINWINDOW_H  
  2. #define MAINWINDOW_H  
  3.   
  4. #include <QMainWindow>  
  5. #include <QSplitter>  
  6. #include <QHBoxLayout>  
  7.   
  8. namespace Ui {  
  9. class MainWindow;  
  10. }  
  11.   
  12. class MainWindow : public QMainWindow  
  13. {  
  14.     Q_OBJECT  
  15.       
  16. public:  
  17.     explicit MainWindow(QWidget *parent = 0);  
  18.     ~MainWindow();  
  19.       
  20. private:  
  21.     Ui::MainWindow *ui;  
  22.     QSplitter *hspliter;        //QTabWidget中的水平分割  
  23.     QSplitter *vspliter;        //mainwindow中的竖直分割  
  24.     QHBoxLayout *tab_h_layout;  //QTabWidget中的tab的layout  
  25. };  
  26.   
  27. #endif // MAINWINDOW_H  

mainwindow.cpp代码如下:
[cpp] view plain copy
  1. #include "mainwindow.h"  
  2. #include "ui_mainwindow.h"  
  3.   
  4. MainWindow::MainWindow(QWidget *parent) :  
  5.     QMainWindow(parent),  
  6.     ui(new Ui::MainWindow)  
  7. {  
  8.     ui->setupUi(this);  
  9.   
  10.     tab_h_layout = new QHBoxLayout;  
  11.     ui->tab->setLayout(tab_h_layout);//手动设置layout  
  12.   
  13.     hspliter = new QSplitter(Qt::Horizontal,ui->tab);//设置水平分割,和它的父控件  
  14.     vspliter = new QSplitter(Qt::Vertical);  
  15.   
  16.     hspliter->addWidget(ui->tableView);  
  17.     hspliter->addWidget(ui->tableView_2);  
  18.     hspliter->setStretchFactor(1,1);  
  19.   
  20.     vspliter->addWidget(ui->tabWidget);  
  21.     vspliter->addWidget(ui->tableView_3);  
  22.     vspliter->setStretchFactor(0,21);  
  23.     vspliter->setStretchFactor(1,1);  
  24.   
  25.     tab_h_layout->addWidget(hspliter);  
  26.   
  27.     this->setCentralWidget(vspliter);  
  28. }  
  29.   
  30. MainWindow::~MainWindow()  
  31. {  
  32.     delete ui;  
  33. }  

程序截图:

ui中显示效果:


层次结构:


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





FROM:  http://blog.csdn.net/envenler/article/details/7942470

0 0