分割窗口QSplitter、停靠窗口QDockWidget和堆栈窗体QStackedWidget

本文主要是介绍分割窗口QSplitter、停靠窗口QDockWidget和堆栈窗体QStackedWidget,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分割窗口QSplitter

直接上示例,内有详细备注。

一个简单的分割窗口功能,整个对话框由三个窗口组成,各窗口之间的大小可随意拖曳改变。

效果图如下:
QSplitter
代码如下:

#include "mainwindow.h"
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QTextCodec>   //提供文本编码之间的转换int main(int argc, char *argv[])
{QApplication a(argc, argv);//设置主窗口的字体QFont font("ZYsong18030", 12);a.setFont(font);//主分割窗口//水平切割,没有指定父控件QSplitter* mainSplitter = new QSplitter(Qt::Horizontal, 0);//左边的文本编辑框,指定父控件为mainSplitterQTextEdit* leftText = new QTextEdit(QObject::tr("left widget"), mainSplitter);//设置该编辑框的文本对称方式:居中。 Qt::AlignHCenter 水平居中, Qt::AlignVCenter 垂直居中leftText->setAlignment(Qt::AlignCenter);//右部分割窗口//垂直分割,并指定父控件为主分割窗口,即将右部分割窗口放入主分割窗口中QSplitter* rightSplitter = new QSplitter(Qt::Vertical, mainSplitter);//右部分割窗口中的两个QTextEditQTextEdit* upText = new QTextEdit(QObject::tr("up widget"), rightSplitter);upText->setAlignment(Qt::AlignCenter);QTextEdit* bottomText = new QTextEdit(QObject::tr("bottom widget"), rightSplitter);bottomText->setAlignment(Qt::AlignCenter);//设置右部分割窗口的分割条在拖拽时是否实时更新rightSplitter->setOpaqueResize(false);   //不实时更新//设置右部分割窗口的伸缩随主窗口改变//参数1:表示控件,按插入顺序从0开始 参数2:大于0的值,表示该控件为可伸缩控件mainSplitter->setStretchFactor(1, 1);//设置主分割窗口的标题mainSplitter->setWindowTitle(QObject::tr("Splitter"));//因为mainSplitter没有指定父控件,所以需要手动显示mainSplitter->show();MainWindow w;w.show();return a.exec();
}

停靠窗口QDockWidget

一个停靠窗口QDockWdiget的使用,一个QMainWindow内有一个QTextEdit作为窗体的主题控件,另新建三个QDockWdiget停靠窗口对象,设置其各自的停靠属性并添加到卖弄Window主窗口中。

效果图如下:
QDockWdiget

代码如下:

#include "dockwindows.h"
#include <QTextEdit>
#include <QDockWidget>
//直接在创建的QMainWindow类的构造中编写,其他文件均不变。
DockWindows::DockWindows(QWidget *parent): QMainWindow(parent)
{//设置主窗口标题setWindowTitle(tr("DockWindow"));//定义一个QTextEdit对象作为主窗口QTextEdit* text = new QTextEdit(this);//设置该text对象的文本text->setText(tr("Main Window"));//设置居中显示text->setAlignment(Qt::AlignCenter);//将text对象设置成主窗口的中央窗口setCentralWidget(text);//停靠窗口1QDockWidget* dock = new QDockWidget(tr("DockWindow1"), this);//设置停靠窗口1 的属性为可移动的dock->setFeatures(QDockWidget::DockWidgetMovable);//设置停靠窗口1的可浮动的区域: 主窗口的左边或者右边dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//没有指定父对象的QTextEdit1QTextEdit* te1 = new QTextEdit();te1->setText(tr("Window1, the dock widget can be moved between docks by user"));//将te1设置成dock的控件dock->setWidget(te1);//最后将停靠窗口1添加到主窗口中并制定初始位置:主窗口的右边addDockWidget(Qt::RightDockWidgetArea, dock);//停靠窗口2dock = new QDockWidget(tr("DockWindow2"), this);//设置停靠窗口2的属性为可关闭、可浮动dock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);QTextEdit* te2 = new QTextEdit();te2->setText(tr("Window2, the dock widget can be detached from the main window,""and foloated as an independent window, and can be closed"));dock->setWidget(te2);addDockWidget(Qt::RightDockWidgetArea, dock);//停靠窗口3dock = new QDockWidget(tr("Window3"), this);dock->setFeatures(QDockWidget::AllDockWidgetFeatures);QTextEdit* te3 = new QTextEdit();te3->setText(tr("Window3, The dock widget can be closed, moved, and floated"));dock->setWidget(te3);addDockWidget(Qt::RightDockWidgetArea, dock);}

堆栈窗体QStackedWdiget

创建一个继承自QDialog的dialog类,内有两个主要控件:QListWidget和QStackedWidget,当选择QListWidget中的item时,切换至QStackedWidget中对应索引的内容。

效果图如下:
QStackedWidget
代码如下:

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:QListWidget* list;QStackedWidget* stack;QLabel* label1;QLabel* label2;QLabel* label3;
};
#endif // DIALOG_H
#include "dialog.h"
#include <QHBoxLayout>
Dialog::Dialog(QWidget *parent): QDialog(parent)
{setWindowTitle(tr("StackedWidget"));list = new QListWidget(this);list->insertItem(0, tr("Window1"));list->insertItem(1, tr("Window2"));list->insertItem(2, tr("Window3"));label1 = new QLabel(tr("WindowTest1"));label2 = new QLabel(tr("WindowTest2"));label3 = new QLabel(tr("WindowTest3"));stack = new QStackedWidget(this);stack->addWidget(label1);stack->addWidget(label2);stack->addWidget(label3);QHBoxLayout* mainLayout = new QHBoxLayout(this);//设置对话框或窗体的边距为5mainLayout->setMargin(5);//设定各控件之间的间距为5mainLayout->setSpacing(5);mainLayout->addWidget(list);//添加控件, 指定StrechFactor为0表示不可伸缩,mainLayout->addWidget(stack, 0, Qt::AlignHCenter);//设定可伸缩控件,参数1指定控件(序号从0起编号), 参数2大于0表示此控件可伸缩//注意list和stack的伸缩比例为1:3mainLayout->setStretchFactor(list, 1);mainLayout->setStretchFactor(stack, 3);connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));}

总结

三个小示例仅使用了这三个窗体类中的部分属性及对应常用的接口,具体应用可根据需求查阅Qt的帮助文档。

这篇关于分割窗口QSplitter、停靠窗口QDockWidget和堆栈窗体QStackedWidget的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/605895

相关文章

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Python如何将大TXT文件分割成4KB小文件

《Python如何将大TXT文件分割成4KB小文件》处理大文本文件是程序员经常遇到的挑战,特别是当我们需要把一个几百MB甚至几个GB的TXT文件分割成小块时,下面我们来聊聊如何用Python自动完成这... 目录为什么需要分割TXT文件基础版:按行分割进阶版:精确控制文件大小完美解决方案:支持UTF-8编码

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

使用Python实现批量分割PDF文件

《使用Python实现批量分割PDF文件》这篇文章主要为大家详细介绍了如何使用Python进行批量分割PDF文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、架构设计二、代码实现三、批量分割PDF文件四、总结本文将介绍如何使用python进js行批量分割PDF文件的方法

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用