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.pswp.cn/diannao/70569.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70569.shtml
英文地址,請注明出處:http://en.pswp.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、概述 在前面的文章中,我們介紹了應用程序循環和事件循環,這為我們的…