QSplitter类的理解

QSplitter为分割窗口类

The QSplitter class implements a splitter widget.

A splitter lets the user control the size of child widgets by dragging the boundary between them. Any number of widgets may be controlled by a single splitter. The typical use of a QSplitter is to create several widgets and add them using insertWidget() or addWidget().

The following example will show a QListView, QTreeView, and QTextEdit side by side, with two splitter handles:

该类可以用于实现分割的组件

该类允许用户通过拖拽子组件之间的边界来控制组件大小。一个类的实例可以控制任意多个组件,典型的使用实例是创建多个组件,将组件通过insertWidget()和addWidget)()来将他们加入到类的实例中。

实例摘自文档:

QSplitter *splitter = new QSplitter(parent);
      QListView *listview = new QListView;
      QTreeView *treeview = new QTreeView;
      QTextEdit *textedit = new QTextEdit;
      splitter->addWidget(listview);
      splitter->addWidget(treeview);
      splitter->addWidget(textedit);
编译后:
QSplitter类的理解_第1张图片

细节的就不贴了。

实例及应用:

//main.cpp
#include "mainwindow.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFont font("ZYSong18030",12);
    a.setFont(font);
    //主分割窗口
    QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);
    QTextEdit *textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);
    textLeft->setAlignment(Qt::AlignCenter);

//    splitterMain->setOpaqueResize(true);
    //右部分分割窗口
    QSplitter *splitterRight=new QSplitter(Qt::Vertical,splitterMain);
    splitterRight->setOpaqueResize(true);
    //表示分割窗口拖拽时边界是否实时显示
    //opaque 不透明
    //stretch 伸展
    //factor

    QTextEdit *textUp=new QTextEdit(QObject::tr("Top Widget"),splitterRight);
    textUp->setAlignment(Qt::AlignCenter);
    QTextEdit *textBottom=new QTextEdit(QObject::tr("Bottom Widget"),splitterRight);
    textBottom->setAlignment(Qt::AlignCenter);
    splitterMain->setStretchFactor(1,1);
    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();
    return a.exec();
}

//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

#endif // MAINWINDOW_H

//mainwindow.cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
}

MainWindow::~MainWindow()
{

}
QSplitter类的理解_第2张图片
需要注意的是:

1)为什么呈现该样式?

由于每一个组件创建时,明确了父对象是谁,类似于insertWidget()和addWidget)(),于是便呈现了该样式

2)

splitterRight->setOpaqueResize(true);

该行代码意义在于:

拖拽边界时边界是否实时变化

3)void QSplitter::setStretchFactor(int index, int stretch)

调用SetStretchFactor()方法用于设定可伸缩控件,它的第1个参数指定设置的控件序号,控件序号按插入的先后次序从0起依次编号;第2个参数为大于0的值,表示此控件为可伸缩控件。此实例中设定右部分割窗为可伸缩控件,当整个对话框的宽度发生改变时,左部的文件编辑框宽度保持不变。右部的分割窗宽度随整个对话框大小的改变进行调整。

你可能感兴趣的:(Qt)