Qt分裂器
Qt 分裂器
QSplitter
QSplitter 是 Qt 框架中提供的一种布局管理控件,属于 QtWidgets 模块,用于在界面中分隔多个子控件并支持用户拖动调整它们大小,常用于需要可调节区域大小的应用,比如文件管理器、IDE 或面板式软件界面。
常用方法/属性
| 方法 / 属性 | 功能描述 |
|---|---|
addWidget(QWidget *widget) |
向分隔器中添加一个子控件。 |
insertWidget(int index, QWidget *widget) |
在指定位置插入一个子控件。 |
widget(int index) |
返回指定索引处的子控件。 |
count() |
返回子控件的数量。 |
indexOf(QWidget *widget) |
返回指定控件在 splitter 中的索引。 |
setOrientation(Qt::Orientation) |
设置分隔方向:Qt::Horizontal 或 Qt::Vertical。 |
orientation() |
返回当前的分隔方向。 |
setSizes(const QList<int> &sizes) |
设置所有子控件的初始尺寸(像素单位)。 |
sizes() |
获取当前所有子控件的尺寸列表。 |
setStretchFactor(int index, int stretch) |
设置某个子控件的拉伸因子(决定空间分配比例)。 |
setCollapsible(int index, bool) |
设置某个子控件是否可以被完全收起。 |
setChildrenCollapsible(bool) |
设置所有子控件是否可以被收起(默认 true)。 |
isCollapsible(int index) |
返回某个子控件是否可折叠。 |
handle(int index) |
返回指定索引处的分隔条句柄(QSplitterHandle*),可用于自定义样式或行为。 |
saveState() const |
保存当前 splitter 的状态(子控件尺寸、顺序等),返回 QByteArray。 |
restoreState(const QByteArray &state) |
恢复之前保存的 splitter 状态。 |
opaqueResize() |
是否启用实时调整尺寸(默认 true,即拖动时立即生效)。 |
setOpaqueResize(bool opaque) |
设置是否启用实时调整尺寸(关闭后拖动只显示拖动线,释放后才更新)。 |
childrenCollapsible() |
返回当前是否允许所有子控件可收起。 |
handleWidth() |
获取分隔条的宽度(默认 5 像素)。 |
setHandleWidth(int width) |
设置分隔条宽度。 |
refresh() |
重新布局所有子控件(不常用)。 |
minimumSizeHint() |
返回推荐的最小尺寸。 |
基本用法示例
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
// 创建一个垂直分割器
QSplitter *splitter = new QSplitter(Qt::Vertical);
// 添加两个 QTextEdit 控件
splitter->addWidget(new QTextEdit("Top Widget"));
splitter->addWidget(new QTextEdit("Bottom Widget"));
// 设置主布局
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(splitter);
window.setLayout(layout);
window.resize(400, 300);
window.show();
return app.exec();
}
自定义样式
可以通过 QSplitterHandle 自定义分隔条样式,比如宽度、颜色等。也可结合 QSS 进行样式定制。
splitter->setStyleSheet("QSplitter::handle { background-color: gray }");
保存和恢复尺寸状态(Persistent State)
QSplitter 内置了两个非常重要的方法:
QByteArray QSplitter::saveState() const
获取当前分隔器的所有状态(包括子控件尺寸、顺序等),返回一个QByteArray。bool QSplitter::restoreState(const QByteArray &state)
恢复之前保存的状态,返回值表示是否成功。
示例:保存状态到 QSettings
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QSettings>
#include <QVBoxLayout>
#include <QWidget>
class MyWindow : public QWidget {
QSplitter *splitter;
public:
MyWindow() {
splitter = new QSplitter(Qt::Horizontal);
splitter->addWidget(new QTextEdit("Left Panel"));
splitter->addWidget(new QTextEdit("Right Panel"));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(splitter);
setLayout(layout);
// 从 QSettings 恢复状态
QSettings settings("MyCompany", "MyApp");
splitter->restoreState(settings.value("splitterState").toByteArray());
}
~MyWindow() {
// 应用关闭时保存状态
QSettings settings("MyCompany", "MyApp");
settings.setValue("splitterState", splitter->saveState());
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWindow w;
w.resize(600, 400);
w.show();
return app.exec();
}
QSettings
QSettings 是 Qt 提供的一个非常实用的类,用于跨平台地保存和读取应用程序的配置数据(比如窗口大小、用户偏好设置、上次打开的文件路径、界面状态等)。它支持将数据持久化到系统注册表、INI 文件、或 macOS 的 plist 文件中,而无需开发者手动处理文件读写。
核心特性
- 自动持久化:程序关闭时不需要手动保存,
QSettings的写入是立即生效的。 - 跨平台兼容:Windows 下默认写入注册表,Linux/macOS 下写入
.ini或系统标准配置路径。 - 层级结构:支持用“路径”的方式组织键值(如
window/size)。 - 支持多种数据类型:字符串、整数、布尔值、QVariant、QByteArray、QSize、QPoint 等。
基本用法
写入配置
#include <QSettings>
QSettings settings("MyCompany", "MyApp");
// 写入键值对
settings.setValue("window/size", QSize(800, 600));
settings.setValue("window/pos", QPoint(100, 100));
settings.setValue("user/rememberMe", true);
读取配置
QSize size = settings.value("window/size", QSize(400, 300)).toSize();
QPoint pos = settings.value("window/pos", QPoint(50, 50)).toPoint();
bool rememberMe = settings.value("user/rememberMe", false).toBool();
构造函数形式
QSettings settings("OrganizationName", "ApplicationName"); // 推荐写法
也可以手动指定 .ini 文件路径:
QSettings settings("config.ini", QSettings::IniFormat);
默认存储路径(按平台)
| 平台 | 默认存储位置 |
|---|---|
| Windows | 注册表 HKEY_CURRENT_USER\Software\MyCompany\MyApp |
| Linux | ~/.config/MyCompany/MyApp.conf(或 .ini 文件) |
| macOS | ~/Library/Preferences/com.MyCompany.MyApp.plist |
若用 IniFormat,会始终使用本地 .ini 文件,不走平台默认方式。
实用方法
| 方法 / 属性 | 说明 |
|---|---|
setValue(key, value) |
设置键值 |
value(key, defaultValue) |
读取值,若不存在则返回默认值 |
contains(key) |
检查是否存在某个键 |
remove(key) |
删除某个键 |
clear() |
清空所有设置项 |
beginGroup("group") / endGroup() |
设置/退出分组(用于逻辑归类) |
childKeys() |
获取当前组下所有键 |
childGroups() |
获取当前组下所有子组 |
sync() |
强制将缓存中的设置写入磁盘 |
高级用法示例:使用分组
settings.beginGroup("MainWindow");
settings.setValue("size", QSize(800, 600));
settings.setValue("pos", QPoint(100, 100));
settings.endGroup();
读取时也一样:
settings.beginGroup("MainWindow");
QSize size = settings.value("size").toSize();
QPoint pos = settings.value("pos").toPoint();
settings.endGroup();
使用分裂器排布简易 HTML 查看器
widget.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>630</width>
<height>350</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,0">
<item>
<widget class="QSplitter" name="splitter">
<property name="styleSheet">
<string notr="true">QSplitter::handle {
background-color: rgb(0, 255, 127);
}</string>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<widget class="QTextBrowser" name="textBrowser"/>
<widget class="QPlainTextEdit" name="plainTextEdit"/>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="btnBackward">
<property name="text">
<string>后退</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnForward">
<property name="text">
<string>前进</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnOpen">
<property name="text">
<string>打开HTML</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget {
Q_OBJECT
public:
Widget(QWidget* parent = nullptr);
~Widget();
private slots:
void on_btnOpen_clicked();
void on_textBrowser_backwardAvailable(bool arg1);
void on_textBrowser_forwardAvailable(bool arg1);
void on_textBrowser_textChanged();
private:
Ui::Widget* ui;
void saveSettings();
void loadSettings();
// QWidget interface
protected:
void closeEvent(QCloseEvent* event) override;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include <QFileDialog>
#include <QSettings>
#include <QUrl>
#include "./ui_widget.h"
// 构造函数:初始化 UI 组件并连接信号与槽函数
Widget::Widget(QWidget* parent) : QWidget(parent), ui(new Ui::Widget) {
ui->setupUi(this); // 设置 UI
ui->plainTextEdit->setReadOnly(true); // 设置 plainTextEdit 为只读,用于显示 HTML 源码
ui->textBrowser->setOpenExternalLinks(true); // 启用超链接的外部打开功能(在浏览器中打开)
ui->btnBackward->setEnabled(false); // 初始化时“后退”按钮禁用
ui->btnForward->setEnabled(false); // 初始化时“前进”按钮禁用
// 连接按钮点击信号与 QTextBrowser 的后退/前进槽函数
connect(ui->btnBackward, &QPushButton::clicked, ui->textBrowser, &QTextBrowser::backward);
connect(ui->btnForward, &QPushButton::clicked, ui->textBrowser, &QTextBrowser::forward);
loadSettings();
}
// 析构函数:释放 UI 资源
Widget::~Widget() {
delete ui;
}
// 打开按钮点击事件:选择 HTML 文件并加载到 QTextBrowser 中
void Widget::on_btnOpen_clicked() {
// 使用 QFileDialog 打开一个文件选择对话框,获取用户选择的 HTML 文件的 URL
// 参数说明:
// 1. this:父窗口指针,指定这个对话框的父对象为当前
// Widget,确保对话框在当前窗口之上弹出
// 2. "open HTML":对话框标题,用于提示用户当前操作是“打开 HTML 文件”
// 3. QUrl():初始路径,传入空 QUrl 表示使用默认目录(可用
// QUrl::fromLocalFile("路径") 指定初始目录)
// 4. "HTML files(*.htm *.html)":过滤器字符串,仅显示 *.htm 和 *.html
// 后缀的文件
QUrl urlFile = QFileDialog::getOpenFileUrl(this, "open HTML", QUrl(), "HTML files(*.htm *.html)");
// 判断用户是否实际选择了文件(即返回的 URL 非空)
if (!urlFile.isEmpty()) {
qDebug() << urlFile; // 输出选择的文件 URL,用于调试
ui->textBrowser->setSource(urlFile); // 将选择的 HTML 文件加载到 QTextBrowser 中显示
}
}
// 当 textBrowser 可以后退时,启用“后退”按钮
void Widget::on_textBrowser_backwardAvailable(bool arg1) {
ui->btnBackward->setEnabled(arg1);
}
// 当 textBrowser 可以前进时,启用“前进”按钮
void Widget::on_textBrowser_forwardAvailable(bool arg1) {
ui->btnForward->setEnabled(arg1);
}
// 当 textBrowser 内容变化时,更新 plainTextEdit 显示 HTML 源码
void Widget::on_textBrowser_textChanged() {
QString strHtml = ui->textBrowser->toHtml(); // 获取 HTML 内容
ui->plainTextEdit->setPlainText(strHtml); // 显示在 plainTextEdit 中
}
// 当窗口关闭时触发的事件处理函数
void Widget::closeEvent(QCloseEvent* event) {
// 保存当前窗口及控件的状态到设置文件
saveSettings();
}
// 保存窗口及控件状态到配置文件
void Widget::saveSettings() {
// 创建 QSettings 对象,参数是组织名和应用名,数据存储路径与注册表或配置文件相关
QSettings settings("QtGuide", "SimpleBrowser");
// 保存主窗口的几何信息(位置和大小)
QByteArray baMainWidget = this->saveGeometry();
// 保存分割器(splitter)的状态(布局信息)
QByteArray baSplitter = ui->splitter->saveState();
// 获取当前文本浏览器的 URL 来源
QUrl urlSrc = ui->textBrowser->source();
// 将以上信息写入配置文件或注册表
settings.setValue("MainWidget", baMainWidget);
settings.setValue("Splitter", baSplitter);
settings.setValue("URL", urlSrc);
}
// 读取配置文件,恢复窗口和控件的状态
void Widget::loadSettings() {
// 创建 QSettings 对象,路径和保存时相同
QSettings settings("QtGuide", "SimpleBrowser");
// 如果存在保存的主窗口几何信息,则恢复窗口位置和大小
if (settings.contains("MainWidget")) {
QByteArray baMainWidget = settings.value("MainWidget").toByteArray();
this->restoreGeometry(baMainWidget);
}
// 如果存在保存的分割器状态,则恢复布局
if (settings.contains("Splitter")) {
QByteArray baSplitter = settings.value("Splitter").toByteArray();
ui->splitter->restoreState(baSplitter);
}
// 如果存在保存的 URL,则设置文本浏览器显示该 URL
if (settings.contains("URL")) {
QUrl urlSrc = settings.value("URL").toUrl();
ui->textBrowser->setSource(urlSrc);
}
}
分裂器内间接添加布局器的示例
widget.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>480</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QSplitter" name="splitter_2">
<property name="styleSheet">
<string notr="true">QSplitter::handle {
background-color: rgb(0, 255, 127);
}</string>
</property>
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<widget class="QSplitter" name="splitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>4</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">QSplitter::handle {
background-color: rgb(0, 255, 127);
}</string>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<widget class="QTextEdit" name="textEdit">
<property name="html">
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
hr { height: 1px; border-width: 0; }
li.unchecked::marker { content: "\2610"; }
li.checked::marker { content: "\2612"; }
</style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">编辑器</p></body></html></string>
</property>
</widget>
<widget class="QWidget" name="">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>功能1</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>功能2</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>功能3</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QTextBrowser" name="textBrowser">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="html">
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
hr { height: 1px; border-width: 0; }
li.unchecked::marker { content: "\2610"; }
li.checked::marker { content: "\2612"; }
</style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">提示信息</p></body></html></string>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
ui_widget.h
/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 6.9.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_WIDGET_H
#define UI_WIDGET_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QTextBrowser>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_Widget
{
public:
QVBoxLayout *verticalLayout_2; // 最外层垂直布局,管理整个窗口的控件排布
QSplitter *splitter_2; // 垂直分割器,垂直分割两个区域
QSplitter *splitter; // 水平分割器,水平分割文本编辑区和按钮区
QTextEdit *textEdit; // 文本编辑控件,位于 splitter 左侧
QWidget *widget; // splitter 右侧的容器 widget,用于承载按钮的布局
QVBoxLayout *verticalLayout; // widget 中的垂直布局,排列多个按钮
QPushButton *pushButton; // 按钮1
QPushButton *pushButton_2; // 按钮2
QPushButton *pushButton_3; // 按钮3
QTextBrowser *textBrowser; // 文本浏览控件,位于 splitter_2 的下方区域
void setupUi(QWidget *Widget)
{
if (Widget->objectName().isEmpty())
Widget->setObjectName("Widget");
Widget->resize(600, 480);
// 创建最外层垂直布局,放入 splitter_2
verticalLayout_2 = new QVBoxLayout(Widget);
verticalLayout_2->setObjectName("verticalLayout_2");
// 创建垂直方向的分割器 splitter_2,分割上半部分(splitter)和下半部分(textBrowser)
splitter_2 = new QSplitter(Widget);
splitter_2->setObjectName("splitter_2");
splitter_2->setStyleSheet(QString::fromUtf8("QSplitter::handle { \n"
" background-color: rgb(0, 255, 127);\n"
"}"));
splitter_2->setOrientation(Qt::Orientation::Vertical);
// 创建水平方向的分割器 splitter,分割左边的文本编辑和右边按钮区域
splitter = new QSplitter(splitter_2);
splitter->setObjectName("splitter");
QSizePolicy sizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(4);
sizePolicy.setHeightForWidth(splitter->sizePolicy().hasHeightForWidth());
splitter->setSizePolicy(sizePolicy);
splitter->setStyleSheet(QString::fromUtf8("QSplitter::handle { \n"
" background-color: rgb(0, 255, 127);\n"
"}"));
splitter->setOrientation(Qt::Orientation::Horizontal);
// 创建文本编辑控件,添加到 splitter 左侧
textEdit = new QTextEdit(splitter);
textEdit->setObjectName("textEdit");
// 创建一个 QWidget(container widget),用来包裹按钮布局
// 注意:QSplitter 只能直接放置 QWidget 类型的控件,
// 不能直接放布局,所以这里创建一个空的 QWidget 作为容器
widget = new QWidget(splitter);
widget->setObjectName("widget");
// 在 widget 中创建垂直布局,用于排列按钮
verticalLayout = new QVBoxLayout(widget);
verticalLayout->setObjectName("verticalLayout");
verticalLayout->setContentsMargins(0, 0, 0, 0); // 去除边距,使按钮紧凑排列
// 创建三个按钮,并添加到 widget 的垂直布局中
pushButton = new QPushButton(widget);
pushButton->setObjectName("pushButton");
verticalLayout->addWidget(pushButton);
pushButton_2 = new QPushButton(widget);
pushButton_2->setObjectName("pushButton_2");
verticalLayout->addWidget(pushButton_2);
pushButton_3 = new QPushButton(widget);
pushButton_3->setObjectName("pushButton_3");
verticalLayout->addWidget(pushButton_3);
// 把包裹按钮的 widget 加入 splitter 的右侧
splitter->addWidget(widget);
// 把 splitter(包含左侧文本编辑和右侧按钮区域)加入 splitter_2 的上部
splitter_2->addWidget(splitter);
// 创建文本浏览控件,放入 splitter_2 的下方
textBrowser = new QTextBrowser(splitter_2);
textBrowser->setObjectName("textBrowser");
QSizePolicy sizePolicy1(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(1);
sizePolicy1.setHeightForWidth(textBrowser->sizePolicy().hasHeightForWidth());
textBrowser->setSizePolicy(sizePolicy1);
// 添加文本浏览控件到底部分割器 splitter_2 中
splitter_2->addWidget(textBrowser);
// 把 splitter_2 添加到最外层的垂直布局中
verticalLayout_2->addWidget(splitter_2);
retranslateUi(Widget);
QMetaObject::connectSlotsByName(Widget);
} // setupUi
void retranslateUi(QWidget *Widget)
{
Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
textEdit->setHtml(QCoreApplication::translate("Widget", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"hr { height: 1px; border-width: 0; }\n"
"li.unchecked::marker { content: \"\\2610\"; }\n"
"li.checked::marker { content: \"\\2612\"; }\n"
"</style></head><body style=\" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">\347\274\226\350\276\221\345\231\250</p></body></html>", nullptr));
pushButton->setText(QCoreApplication::translate("Widget", "\345\212\237\350\203\2751", nullptr));
pushButton_2->setText(QCoreApplication::translate("Widget", "\345\212\237\350\203\2752", nullptr));
pushButton_3->setText(QCoreApplication::translate("Widget", "\345\212\237\350\203\2753", nullptr));
textBrowser->setHtml(QCoreApplication::translate("Widget", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"hr { height: 1px; border-width: 0; }\n"
"li.unchecked::marker { content: \"\\2610\"; }\n"
"li.checked::marker { content: \"\\2612\"; }\n"
"</style></head><body style=\" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">\346\217\220\347\244\272\344\277\241\346\201\257</p></body></html>", nullptr));
} // retranslateUi
};
namespace Ui {
class Widget: public Ui_Widget {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_WIDGET_H
-
QSplitter只能直接放置QWidget,而不能直接放置布局,所以自动生成的代码中会创建一个空的QWidget作为容器,再给这个QWidget添加布局。 -
水平
splitter左边是QTextEdit,右边是一个包裹了垂直布局的QWidget,布局中放了3个按钮。 -
垂直
splitter_2上半部分是上述水平splitter,下半部分是QTextBrowser。

浙公网安备 33010602011771号