QT實戰經驗總結 連載中

QT實戰經驗總結

  • 在看書系統學習后,就開始實戰了,會遇到很多問題
    • 1.信號和槽的思考
    • 2.在python 或 C++ 代碼中,對 QML 代碼中控件的調用
    • 關于在一個窗口上不斷打開新窗口

在看書系統學習后,就開始實戰了,會遇到很多問題

python案例

1.信號和槽的思考

  • 當我練習簡單的信號和槽的時候,只是 print 一些文字,所以我的槽函數沒有封裝到類中。但是當我做一些復雜操作時,我發現就得用類來封裝起來。這里就涉及一個 engine.rootContext().setContextProperty("backend", backend)
    作用是讓 backend 這個類,可以在 QML 中調用,因為類定義是在 python 中寫的

  • 我在練習信號和槽的時候發現,我的python代碼(后端)可以給QML代碼(前端)發現號,而前端也可以給后端發現號。所以我發現這兩中發現號的方式是不一樣的。

    • 前端給后端發,常用的比如點擊按鈕,

      • 前端在你的 Button 中使用 onClicked{槽函數} 發射信號,對應的你的后端代碼得有 @Slot() 來接收這個信號
    • 后端給前端發

      • 后端中使用 Signal() 發射信號,對應的前端得用 Connections 接收信號,Connections是專門監聽后端信號的控件,它有監聽目標 target 屬性值和槽函數 function onFileSelected() 屬性值

2.在python 或 C++ 代碼中,對 QML 代碼中控件的調用

剛開始寫QT的時候,我就遇到這個問題
我在寫后端邏輯時,會涉及到對前端 QML 控件的調用。
比如,我點擊按鈕,改變按鈕或其他控件的屬性。

這里需要用到的就是 engin.rootobject()[0].findChild(Object,"name")
engin 是用 python 時通過 QQmlApplicationEngine() 創造的對象。

  • rootObject()[0] 獲取到根控件,就是 Window 控件(我以為它是以樹形展開獲取,但是我測試發現只能獲取到根控件,就只有這一個)
  • findChild(Object,“name”) 就是從根控件 Window 找名為 name 的子控件。
//通過點擊按鈕來改變該按鈕的文本
//只用函數實現不了,必須通過類才可以
//要注意的是代碼都是寫在 sys.exit(app.exec()) 前面的
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtCore import QObject, Slot
import sys
class Backend(QObject):def __init__(self, root_object, parent=None):super().__init__(parent)self.root_object = root_object@Slot()def say_hello(self):my_button = root_object.findChild(QObject, "myButton")if my_button:print("aaa",my_button.objectName())my_button.setProperty("text","bbb")
if __name__ == "__main__":app = QGuiApplication([])engine = QQmlApplicationEngine()  engine.load("qml/main.qml")if not engine.rootObjects():sys.exit(-1)root_object = engine.rootObjects()[0]backend = Backend(root_object)engine.rootContext().setContextProperty("backend", backend)sys.exit(app.exec())

關于在一個窗口上不斷打開新窗口

class MainWindow(QObject):def __init__(self):super().__init__()self.engine = QQmlApplicationEngine()self.engine.rootContext().setContextProperty("mainwindow",self)self.engine.load("main_window.qml")if not self.engine.rootObjects():sys.exit(-1)self.main_window = self.engine.rootObjects()[0]self.first_window_component = QQmlComponent(self.engine)self.first_window_component.loadUrl("first_window.qml")if self.first_window_component.isReady():self.first_window = self.first_window_component.create()if self.first_window is None:print(self.first_window_component.errorString())else:print(self.first_window_component.errors())self.second_window_component = QQmlComponent(self.engine)self.second_window_component.loadUrl("second_window.qml")if self.second_window_component.isReady():self.second_window = self.second_window_component.create()if self.second_window is None:print(self.second_window_component.errorString())else:print(self.second_window_component.errors())@Slot()def close(self):self.main_window.close()@Slot()def first_window_close(self):self.first_window.close()@Slot()def second_window_close(self):self.second_window.close()if __name__ == "__main__":app = QGuiApplication(sys.argv)main_window = MainWindow()sys.exit(app.exec())

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63355.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從 CephFS 到 JuiceFS:同程旅行億級文件存儲平臺構建之路

隨著公司業務的快速發展,同程旅行的非結構化的數據突破 10 億,在 2022 年,同程首先完成了對象存儲服務的建設。當時,分布式文件系統方面,同程使用的是 CephFS,隨著數據量的持續增長,CephFS 的高…

固定資產分類,提升資產盤活效益

固定資產是企業長期使用的重要資源,涵蓋范圍廣、種類多,不同的資產需要針對性管理。通過科學的分類與高效的盤活策略,不僅可以優化資源配置,還能提升企業資產的利用效率和經濟效益。以下將詳細解析固定資產的分類方式和盤活效益的…

富途證券C++面試題及參考答案

C++ 中堆和棧的區別 在 C++ 中,堆和棧是兩種不同的內存區域,它們有許多區別。 從內存分配方式來看,棧是由編譯器自動分配和釋放的內存區域。當一個函數被調用時,函數內的局部變量、函數參數等會被壓入棧中,這些變量的內存空間在函數執行結束后會自動被釋放。例如,在下面的…

【字符串匹配算法——BF算法】

🌈個人主頁: Aileen_0v0 🔥熱門專欄: 華為鴻蒙系統學習|計算機網絡|數據結構與算法 ?💫個人格言:“沒有羅馬,那就自己創造羅馬~” 文章目錄 BF算法介紹及過程演示代碼實現過程下節預告KMP算法利用next數組存儲子串中j回退的位置(…

Linux 文件系統目錄結構及其簡要介紹

Hello! 親愛的小伙伴們,大家好呀(Smile~)!我是 H u a z z i Huazzi Huazzi,歡迎觀看本篇博客,接下來讓我們一起來學習一下Linux 文件系統目錄結構吧!祝你有所收獲! 本篇博客的目錄&a…

小米準備入局Nas?Nas究竟是啥?能干啥?

一開頭就來了個三連問:小米準備入局Nas?Nas究竟是啥?Nas能干啥? 好像這段時間Nas這個詞頻頻出現,但很多小伙伴都不知道這個是什么設備。首先咱們來解決一下名詞Nas是什么意思。 什么是Nas? 為了盡可能解釋…

基于Socket實現客戶端和服務端的Tcp通信(C#)

0.前言 使用C#和Unity實現復刻Liar’s bar中的功能 軟件開發大作業 本系列文章用于記錄與分享開發過程中使用到的知識點,以及常見錯誤 本文主要描述有關網絡編程的內容 目錄 0.前言1.使用Socket搭建Server1.1Server端的Socket連接1.2 Server端接收Client的信息1.3…

【mysql】如何查看大表記錄行數

目錄 1. 使用 ANALYZE TABLE 和 SHOW TABLE STATUS2. 查詢 INFORMATION_SCHEMA 表3. 使用索引統計信息4. 維護行數緩存5. 使用分區計數 1. 使用 ANALYZE TABLE 和 SHOW TABLE STATUS 1.ANALYZE TABLE 可以更新表的統計信息,然后使用 SHOW TABLE STATUS 來查看估算的…

文件斷點續傳(視頻播放,大文件下載)

客戶端每次請求取大文件部分數據。 瀏覽器播放mp4視頻時,會首先傳Range消息頭,檢測到206狀態碼,和Content-Range,Accept-Ranges 會自動請求余下數據。后端需要在文件任意偏移量取數據。 參考: springboot項目實現斷…

游戲AI實現-尋路算法(A*)

A*(A-star)是一種圖遍歷和尋路算法,由于其完整性、最優性和最佳效率,它被用于計算機科學的許多領域。給定一個加權圖、一個源節點和一個目標節點,該算法將找到從源到目標的最短路徑(相對于給定的權重&#…

any/all 子查詢優化規則的原理與解析 | OceanBase查詢優化

背景 在通常情況下,當遇到包含any/all子查詢的語句時,往往需要遵循嵌套執行的方式,因此其查詢效率較低。Oceanbase中制定了相應的any/all子查詢優化規則,能夠能夠識別并優化符合條件的any/all子查詢,從而有效提升查詢…

[HNOI2002] 營業額統計 STL - set集合

文章目錄 [HNOI2002] 營業額統計題目描述樣例輸入 #1樣例輸出 #1 提示題解相關知識點set [HNOI2002] 營業額統計 STL - set解題 題目描述 Tiger 最近被公司升任為營業部經理,他上任后接受公司交給的第一項任務便是統計并分析公司成立以來的營業情況。 Tiger 拿出…

汽車供應鏈 “劇變”開始,“智能感知潛在龍頭”誕生

智能汽車產業鏈“劇變”已經開啟,智能感知軟硬件能力的權重正在不斷被放大。 比如滿足高階泊車的第二代AK2超聲波傳感器、滿足人機共駕場景需求的電子外后視鏡(CMS)、iTOF 3D成像視覺感知(用于艙內監控)等新產品&…

Latex中表格添加底部文本注釋并調整對齊

如何實現從第一個表到第三個表的轉換, 其中主要涉及到兩點: (1)底部腳注與表格自動對齊并縮進換行 (2)表格自適應頁面寬度 底部腳注的對齊與換行縮進需要用到 \usepackage{threeparttable} \usepackage{…

SQL 查詢方式比較:子查詢與自連接

在 SQL 中,子查詢和自連接是兩種常見的查詢方式,它們的功能雖然可以相同,但實現的方式不同。本文通過具體示例,深入探討這兩種查詢方式,并配合數據展示,幫助大家理解它們的使用場景和差異。 數據示例 假設…

html基礎-認識html

1.什么是html html是瀏覽器可以識別的的標記語言&#xff0c;我們在瀏覽器瀏覽的網頁就是一個個的html文檔 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>認識html</title> </head> <body><h1…

linux 無網絡安裝mysql

下載地址 通過網盤分享的文件&#xff1a;mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz 鏈接: https://pan.baidu.com/s/1qm48pNfGYMqBGfoqT3hxPw?pwd0012 提取碼: 0012 安裝 解壓 tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv /usr/mysql-5.7.33-linux-glibc2.1…

利用高德API獲取整個城市的公交路線并可視化(七)

本篇文章是對我們從高德拿到的公交/地鐵的json文件的精細化處理的一個深入解析&#xff0c;通過對這些原始數據進行詳細的清洗、轉換和分析&#xff0c;我們通過對數據的質量和可用性的提升&#xff0c;來為后續的數據精細化處理和研究做基礎數據的支撐&#xff0c;從而為后續的…

OGV格式如何轉換成MP4格式?五款視頻格式轉換工具

在數字時代&#xff0c;視頻已成為我們日常生活、工作和學習中不可或缺的一部分。而不同的設備和平臺往往支持不同的視頻格式&#xff0c;這就需要對視頻進行格式轉換。 OGV&#xff08;Ogg Video File&#xff09;是一種使用OGG開源格式的容器&#xff0c;用于存儲帶或不帶音頻…

番外篇 | Hyper-YOLO:超圖計算與YOLO架構相結合成為目標檢測新的SOTA !

前言:Hello大家好,我是小哥談。Hyper-YOLO,該方法融合了超圖計算以捕捉視覺特征之間復雜的高階關聯。傳統的YOLO模型雖然功能強大,但其頸部設計存在局限性,限制了跨層特征的融合以及高階特征關系的利用。Hyper-YOLO在骨干和頸部的聯合增強下,成為一個突破性的架構。在COC…