要的效果是以下:
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();
}
实现效果如上所示