Qt中QDockWidget的使用方式

在PyQt5中使用QDockWidget可以创建灵活的停靠窗口,增强应用程序的多功能性。以下是详细的步骤和示例代码:

基本步骤

  1. 导入模块:确保导入必要的PyQt5模块。
  2. 创建主窗口:继承QMainWindow并初始化界面。
  3. 设置中心部件:例如QTextEdit作为主内容区域。
  4. 创建QDockWidget
    • 设置标题、允许停靠的区域和特性(可关闭、可移动等)。
    • 添加内容部件(如QListWidget)。
  5. 添加停靠窗口:使用addDockWidget()将QDockWidget添加到主窗口。
  6. 处理多个停靠窗口:使用splitDockWidget()tabifyDockWidget()进行布局管理。

示例代码

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTextEdit, QDockWidget, QListWidget)
from PyQt5.QtCore import Qtclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):# 设置中心文本编辑器self.textEdit = QTextEdit()self.setCentralWidget(self.textEdit)# 创建左侧停靠窗口dockLeft = QDockWidget("工具面板", self)dockLeft.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)dockLeft.setFeatures(QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetMovable)# 添加列表内容listWidget = QListWidget()listWidget.addItems(["工具1", "工具2", "工具3"])dockLeft.setWidget(listWidget)self.addDockWidget(Qt.LeftDockWidgetArea, dockLeft)# 创建右侧停靠窗口dockRight = QDockWidget("属性面板", self)dockRight.setAllowedAreas(Qt.RightDockWidgetArea)dockRight.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetClosable)# 添加属性列表propList = QListWidget()propList.addItems(["大小", "颜色", "位置"])dockRight.setWidget(propList)self.addDockWidget(Qt.RightDockWidgetArea, dockRight)# 设置窗口属性self.setWindowTitle('停靠窗口示例')self.setGeometry(100, 100, 1000, 600)if __name__ == '__main__':app = QApplication(sys.argv)mainWin = MainWindow()mainWin.show()sys.exit(app.exec_())

关键方法说明

  • setAllowedAreas():指定允许停靠的区域(使用Qt.DockWidgetArea枚举值,如Qt.LeftDockWidgetArea)。
  • setFeatures():设置停靠窗口特性,如QDockWidget.DockWidgetClosable(可关闭)、QDockWidget.DockWidgetMovable(可移动)。
  • addDockWidget():将停靠窗口添加到主窗口的指定区域。
  • splitDockWidget(existing, new, orientation):分割现有停靠区域来放置新窗口。
  • tabifyDockWidget(first, second):将两个停靠窗口堆叠为标签页形式。

高级用法

  • 恢复关闭的停靠窗口:保留对QDockWidget的引用,通过setVisible(True)或重新添加。
  • 信号处理:连接dockLocationChanged等信号以响应状态变化。
  • 浮动窗口调整:覆盖floatEvent()方法处理浮动时的界面调整。

注意事项

  • 确保正确导入枚举值,如Qt.LeftDockWidgetAreaQDockWidget.DockWidgetClosable
  • 使用QMainWindow的中央部件作为应用程序的核心功能区。
  • 测试不同停靠组合和浮动状态以确保界面行为符合预期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker独立部署milvus向量数据库

milvus镜像:国外封锁,国内源也不好用。基本上所有源都不能用 首先想到阿里云服务,但是阿里云国外服务器便宜的300~400呢。 基于成本考虑终于装上心心念念的milvus(*^▽^*) 安装 Milvus 安装 Milvus 独立版 wget https://raw.githubuserco…

【SpringBoot整合系列】HttpClient远程访问的示例

前言 使用Apache的HttpClient库,添加Apache HttpClient的依赖。工具类的封装。通常,工具类需要处理GET、POST请求,可能还有其他方法如PUT、DELETE。需要设计一个工具类,提供静态方法,可以发送请求,并处理响…

Git操作整体流程

文章目录 1.Git创建个人仓库2、Git全局配置3、Git本地管理4. Git本地管理常用命令汇总5、使用Git命令将项目提交到远程码云管理6.使用IDEA进行管理7、Idea里面的终端8、关于提交总结 1.Git创建个人仓库 打开https://gitee.com/,登录个人账号,右上角加号…

MySQL MHA 部署全攻略:从零搭建高可用数据库架构

文章目录 1.MHA介绍2.MHA组件介绍3.集群规划4.服务器初始化5.MySQL集群部署5.1 安装MySQL集群5.2 配置一主两从5.3 测试MySQL主从5.4 赋予MHA用户连接权限 6.安装MHA环境6.1 安装MHA Node6.2 安装MHA Manager 7.配置MHA环境8.MySQL MHA高可用集群测试8.1 通过VIP连接MySQL8.2模…

如何查看java的字节码文件?javap?能用IDEA吗?

编译指令: javac YourProject.java 查看字节码文件的指令: javap -c -l YourProject.class 不添加-c指令就不会显示字节码文件: 不添加 -l 就不会显示源代码和字节码文件的对应关系: 添加-l之后多出来这些: IDEA不太…

1、Window Android 13模拟器 将编译的映像文件导入Android Studio

1、环境准备 编译环境:Ubuntu-18.04.5编译版本:android13-release下载地址:清华大学开源软件镜像站AOSP # 下载repo # 同步代码:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…

JUC并发—9.并发安全集合三

大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 1.并发安全的数组列表CopyOnWriteArrayList …

报错:Cannot read properties of null (reading ‘ce‘)解决方法

背景 工作项目中要做右键菜单打开趋势图弹窗的需求,这个弹窗使用了vue-resizable的第三方插件,这个插件的主要作用是把弹窗设置为可拖拽的效果。这个用vue-resizable做的弹窗已经做好了,在别的项目中能够正常的运行。但是我把它拿过来放在新…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_process_options

ngx_process_options 声明在 src\core\nginx.c static ngx_int_t ngx_process_options(ngx_cycle_t *cycle); 定义在 src\core\nginx.c static ngx_int_t ngx_process_options(ngx_cycle_t *cycle) {u_char *p;size_t len;if (ngx_prefix) {len ngx_strlen(ngx_prefix);p …

数据结构系列二:包装类+泛型

包装类泛型 一、包装类(1)基本数据类型和对应的包装类(2)装箱和拆箱 二、泛型(1)什么是泛型(2)引出泛型(3)语法(4)泛型类的使用1.语法…

量子计算驱动的金融衍生品定价革命:突破传统蒙特卡洛模拟的性能边界

引言:金融计算的算力困局 某国际投行采用128量子位处理器对亚洲期权组合定价时,其量子振幅估计算法在2.7秒内完成传统GPU集群需要68小时的计算任务。在蒙特卡洛路径模拟实验中,量子随机游走算法将10,000维衍生品的价格收敛速度提升4个数量级…

Spring容器初始化扩展点:ApplicationContextInitializer

目录 一、什么是ApplicationContextInitializer? 1、核心作用2、适用场景 二、ApplicationContextInitializer的使用方式 1、实现ApplicationContextInitializer接口2、注册初始化器 三、ApplicationContextInitializer的执行时机四、实际应用案例 1、动态设置环境…

hive—常用的函数整理

1、size(split(...))函数用于计算分割后字符串数组的长度 实例1):由客户编号列表计算客户编号个数 --数据准备 with tmp_test01 as ( select tag074445270 tag_id,202501busi_mon , 012399931003,012399931000 index_val union all select tag07444527…

vue3 采用xlsx库实现本地上传excel文件,前端解析为Json数据

需求:本地上传excel 文件,但需要对excel 文件的内容进行解析,然后展示出来 1. 安装依赖 首先,确保安装了 xlsx 库: bash复制 npm install xlsx 2. 创建 Vue 组件 创建一个 Vue 组件(如 ExcelUpload.v…

若依框架实现动态失效时间JWT Token的实践指南

一、功能需求背景 在前后端分离架构中,JWT(JSON Web Token)作为无状态认证方案被广泛使用。若依(RuoYi)框架的TokenService默认采用固定失效时间策略,但在实际开发中常需要根据业务场景动态调整Token有效期…

C++ 设计模式-策略模式

支付策略 #include <iostream> #include <memory> #include <unordered_map> #include <vector> #include <ctime>// 基础策略接口 class PaymentStrategy { public:virtual ~PaymentStrategy() default;virtual std::string name() const 0;…

国产编辑器EverEdit - 如何在EverEdit中管理工程?

1 工程管理 1.1 应用场景 用户创建工程后&#xff0c;会涉及到工程的管理 &#xff0c;比如&#xff1a;打开工程、关闭工程等 1.2 使用方法 1.2.1 打开工程 单击主菜单工程 -> 打开工程&#xff0c;会弹出打开对话框&#xff0c;用户在对话框中选择需要打开的工程文件即…

MYSQL-数据库-DDL-DML-DQL-DCL-基础学习

MySql概念&#xff1a; 建立在关系模型基础上&#xff0c;有多张相互连接的二维表组成的数据库 SQL通用语法&#xff1a; 1.SQL语句可以单行或多行书写&#xff0c;以分号结尾 2.SQL语句可以使用空格/缩进来增强语句的可读性 3.MySQL数据库的SQL语句不区分大小写&#xff0c;关…

SpringBoot核心框架之AOP详解

SpringBoot核心框架之AOP详解 一、AOP基础 1.1 AOP概述 AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程&#xff0c;面向方面编程&#xff09;&#xff0c;其实就是面向特定方法编程。 场景&#xff1a;项目部分功能运行较慢&#xff0c;定位执行耗时…

【RK3588嵌入式图形编程】-SDL2-构建模块化UI

构建模块化UI 文章目录 构建模块化UI1、概述2、创建UI管理器3、嵌套组件4、继承5、多态子组件6、总结在本文中,将介绍如何使用C++和SDL创建一个灵活且可扩展的UI系统,重点关注组件层次结构和多态性。 1、概述 在前面的文章中,我们介绍了应用程序循环和事件循环,这为我们的…