QSplitter类的理解

来源:互联网 发布:淘宝买家秀大尺度网站 编辑:程序博客网 时间:2024/05/29 10:35

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 aQSplitter is to create several widgets and add them usinginsertWidget() oraddWidget().

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);
编译后:

细节的就不贴了。

实例及应用:

//main.cpp#include "mainwindow.h"#include <QApplication>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 <QMainWindow>#include <QtWidgets>class MainWindow : public QMainWindow{    Q_OBJECTpublic:    MainWindow(QWidget *parent = 0);    ~MainWindow();};#endif // MAINWINDOW_H

//mainwindow.cpp#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent){}MainWindow::~MainWindow(){}

需要注意的是:

1)为什么呈现该样式?

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

2)

splitterRight->setOpaqueResize(true);

该行代码意义在于:

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

3)void QSplitter::setStretchFactor(intindex,intstretch)

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

原创粉丝点击