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().

QSplitter类实现了一个分离小部件。
splitter允许用户通过拖动子部件之间的边界来控制它们的大小。
任何数量的小部件都可以由单个拆分器控制。QSplitter的典型用法是创建几个小部件并使用
insertWidget()或addWidget()添加它们。

看一个例子

 

    this->setWindowTitle("码农小明--QSplitter");

    QSplitter* splitter = new QSplitter(this);
    splitter->setFixedSize(500,500);

    QTextEdit* textEdit1 = new QTextEdit();
    QTextEdit* textEdit2 = new QTextEdit();
    QTextEdit* textEdit3 = new QTextEdit();

    splitter->addWidget(textEdit1);
    splitter->addWidget(textEdit2);
    splitter->addWidget(textEdit3);

    textEdit1->setText("Edit1");
    textEdit1->setAlignment(Qt::AlignCenter);

    textEdit2->setText("Edit2");
    textEdit2->setAlignment(Qt::AlignCenter);

    textEdit3->setText("Edit3");
    textEdit3->setAlignment(Qt::AlignCenter);


    this->setFixedSize(500,500);

  

If a widget is already inside a QSplitter when insertWidget() or addWidget() is called,
it will move to the new position. This can be used to reorder widgets in the splitter later.
You can use indexOf(), widget(), and count() to get access to the widgets inside the splitter.

如果在调用insertWidget()或addWidget()时,一个小部件已经在QSplitter中,那么它将移动到新的位置。
这可以用于稍后在拆分器中重新排序小部件。您可以使用indexOf()、widget()和count()来访问splitter中的小部件。

   

qDebug()<<"splitter->count:"<<splitter->count();

  "splitter->count:"<<3;

QSplitter 把 widget 横向的分为 3个widget (默认方向为 横向)

A default QSplitter lays out its children horizontally (side by side);
you can use setOrientation(Qt::Vertical) to lay its children out vertically.

默认的QSplitter水平地(并排地)布局它的子组件;
你可以使用setOrientation(Qt::Vertical)功能将其子机器人垂直放置。

splitter->setOrientation(Qt::Vertical);//设置方向为垂直

 

QSplitter resizes its children dynamically by default.
If you would rather have QSplitter resize the children only at the end of a resize operation,
call setOpaqueResize(false).

默认情况下,QSplitter会动态调整其子元素的大小。如果您希望QSplitter仅在调整大小操作结束时调整子元素的大小,
那么调用setOpaqueResize(false)

默认的true

splitter->setOpaqueResize(true);//默认的true

效果:

 

splitter->setOpaqueResize(false);

效果:

区别很明显就是 能不能实时的预览到 拖拽时的画面

 

The initial distribution of size between the widgets is determined by multiplying
the initial size with the stretch factor.
The function sizes() returns the sizes set by the user.
Alternatively, you can save and restore the sizes of the widgets from a
QByteArray using saveState() and restoreState() respectively.

小部件之间大小的初始分布是通过将初始大小与伸缩因子相乘确定的。
您还可以使用setsize()来设置所有小部件的大小
。函数size()返回用户设置的大小。
或者,您可以分别使用saveState()和restoreState()从QByteArray中保存和恢复小部件的大小。

看一下 void QSplitter::setSizes(const QList<int> &list)

Sets the child widgets' respective sizes to the values given in the list.
If the splitter is horizontal, the values set the width of each widget in pixels,
from left to right. If the splitter is vertical, the height of each widget is set,
from top to bottom.

将子部件的各自大小设置为列表中给定的值。
如果splitter是水平的,则这些值将以像素为单位设置每个小部件的宽度,从左到右。
如果splitter是垂直的,则从上到下设置每个小部件的高度

    QList<int> list;
    list<<50<<100<<200;//width 为 50 100 200

    splitter->setSizes(list);

 

注意:

Note: Adding a QLayout to a QSplitter is not supported (either through setLayout() or
making the QSplitter a parent of the QLayout); use addWidget() instead (see example above).

不支持向QSplitter添加QLayout(通过setLayout()或将QSplitter作为QLayout的父元素);
使用addWidget()代替(参见上面的例子)。

 

   

 this->setWindowTitle("码农小明--QSplitter");

    QSplitter* splitter = new QSplitter(this);
    splitter->setFixedSize(500,500);

    QTextEdit* textEdit1 = new QTextEdit();
    QTextEdit* textEdit2 = new QTextEdit();
    QTextEdit* textEdit3 = new QTextEdit();
    QTextEdit* textEdit4 = new QTextEdit();


    splitter->addWidget(textEdit1);


    textEdit1->setText("Main-Left");
    textEdit1->setAlignment(Qt::AlignCenter);

    textEdit2->setText("Right-Top");
    textEdit2->setAlignment(Qt::AlignCenter);

    QSplitter* splitter2 = new QSplitter(splitter);
    splitter2->setOrientation(Qt::Vertical);

    splitter2->addWidget(textEdit2);

    textEdit3->setText("Right-Bottom-left");
    textEdit3->setAlignment(Qt::AlignCenter);

    textEdit4->setText("Right-Bottom-right");
    textEdit4->setAlignment(Qt::AlignCenter);

    QSplitter* splitter3 = new QSplitter(splitter2);

    splitter3->addWidget(textEdit3);
    splitter3->addWidget(textEdit4);


    this->setFixedSize(500,500);



 

QSplitter 是 Qt 框架中的一个控件,可以将一个窗口分割成多个可调整大小的部分。它通常用于创建一个可调整大小的面板,其中包含多个窗口小部件,用户可以根据需要调整它们的大小。 以下是使用 QSplitter 的基本步骤: 1. 创建 QSplitter 对象。 ``` QSplitter* splitter = new QSplitter(Qt::Horizontal, parent); ``` 这将创建一个水平方向的 QSplitter 对象,并将其添加到指定的父窗口中。 2. 向 QSplitter 中添加子控件。 ``` splitter->addWidget(widget1); splitter->addWidget(widget2); ``` 这将向 QSplitter 中添加两个子控件 widget1 和 widget2。 3. 显示 QSplitter。 ``` splitter->show(); ``` 这将显示 QSplitter 和其子控件。 4. 设置子控件的大小。 可以使用 `setSizes()` 函数设置子控件的大小。例如: ``` splitter->setSizes(QList<int>() << 100 << 200); ``` 这将设置第一个子控件的宽度为 100 像素,第二个子控件的宽度为 200 像素。 完整的代码示例: ``` #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget* window = new QWidget(); QSplitter* splitter = new QSplitter(Qt::Horizontal, window); QTextEdit* textEdit1 = new QTextEdit(splitter); QTextEdit* textEdit2 = new QTextEdit(splitter); splitter->addWidget(textEdit1); splitter->addWidget(textEdit2); splitter->setSizes(QList<int>() << 100 << 200); window->setCentralWidget(splitter); window->show(); return app.exec(); } ``` 这将创建一个包含两个 QTextEdit 控件的水平 QSplitter,第一个控件的宽度为 100 像素,第二个控件的宽度为 200 像素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值