要的效果是以下:
QT C++ 两个QWideget A B现在有放在一个窗口QWideget Test内,初始比例要2:8 ,现在我要 A B 两个窗口中间 当鼠标移到他中间时,有条线,可以左右移动来控件 A B 窗口所占的大小widgetB (有 widgetC widgetD)又分为两个区域,可以上下拖动 初始上下比例也是1:9
要实现一个嵌套的分割窗口,其中widgetB
包含widgetC
和widgetD
,并且可以上下拖动以调整它们的大小比例,初始比例为1:9,您可以使用两个QSplitter
控件:一个用于主窗口的左右分割,另一个用于widgetB
的上下分割。
以下是实现这一功能的步骤和示例代码:
-
创建主窗口和主QSplitter: 在主窗口中创建一个
QSplitter
实例,并设置其方向为水平。 -
添加QWidget A和B到主QSplitter: 将
widgetA
和widgetB
添加到主QSplitter
中,并设置初始大小比例。 -
创建widgetB的QSplitter: 在
widgetB
内部创建另一个QSplitter
实例,并设置其方向为垂直。 -
添加widgetC和D到widgetB的QSplitter: 将
widgetC
和widgetD
添加到widgetB
的QSplitter
中,并设置初始大小比例。 -
设置初始比例: 使用
QSplitter
的setSizes
方法来设置widgetA
和widgetB
的初始大小比例,以及widgetC
和widgetD
的初始大小比例。
#include "mainwindow.h"
#include <QApplication>
#include "LayersFrameList.h"
#include <qDebug>
#include <QSplitter>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
{
// 创建主窗口
QWidget *mainWidget = new QWidget;
mainWidget->resize(800, 600);
// 创建主QSplitter,水平方向
QSplitter *mainSplitter = new QSplitter(Qt::Horizontal, mainWidget);
// 创建widgetA和widgetB
QWidget *widgetA = new QWidget;
widgetA->setStyleSheet("background-color: lightblue;");
QWidget *widgetB = new QWidget;
widgetB->setStyleSheet("background-color: lightgrey;");
// 将widgetA和widgetB添加到主QSplitter中
mainSplitter->addWidget(widgetA);
mainSplitter->addWidget(widgetB);
// 设置widgetA和widgetB的初始大小比例
QList<int> mainSizes;
mainSizes << mainWidget->width() * 0.2 << mainWidget->width() * 0.8;
mainSplitter->setSizes(mainSizes);
// 创建widgetB的QSplitter,垂直方向
QSplitter *subSplitter = new QSplitter(Qt::Vertical, widgetB);
// 创建widgetC和widgetD
QWidget *widgetC = new QWidget;
widgetC->setStyleSheet("background-color: lightgreen;");
QWidget *widgetD = new QWidget;
widgetD->setStyleSheet("background-color: pink;");
// 将widgetC和widgetD添加到widgetB的QSplitter中
subSplitter->addWidget(widgetC);
subSplitter->addWidget(widgetD);
// 设置widgetC和widgetD的初始大小比例
QList<int> subSizes;
subSizes << widgetB->height() * 0.1 << widgetB->height() * 0.9;
subSplitter->setSizes(subSizes);
// 设置widgetB的布局,并添加subSplitter
QVBoxLayout *layoutB = new QVBoxLayout(widgetB);
layoutB->addWidget(subSplitter);
// 设置主窗口的布局,并添加mainSplitter
QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget);
mainLayout->addWidget(mainSplitter);
// 显示主窗口
mainWidget->show();
}
w.show();
return a.exec();
}
实现效果如上所示