QT实战经验总结 连载中

embedded/2024/12/24 2:26:09/

QT实战经验总结

  • 在看书系统学习后,就开始实战了,会遇到很多问题
    • 1.信号和槽的思考
    • 2.在python 或 C++ 代码中,对 QML 代码中控件的调用
    • 3.关于在一个窗口上不断打开新窗口

在看书系统学习后,就开始实战了,会遇到很多问题

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 的子控件。

3.关于在一个窗口上不断打开新窗口

在这里,你需要在主窗口的类中初始化其他的窗口,然后你要创建一些打开、关闭窗口的函数
需要用到的函数

self.first_window_component = QQmlComponent(self.engine)
self.first_window_component.loadUrl("test_window/first_window.qml")
if self.first_window_component.isReady():self.first_window = self.first_window_component.create()
else:print(self.first_window_component.errors())@Slot()
def show_first_window(self):self.first_window.setVisible(True)		@Slot()
def close_first_window(self):self.first_window.setVisible(False)    

http://www.ppmy.cn/embedded/148228.html

相关文章

ECharts中通过饼图(type为pie)绘制出仪表盘进度条

在ECharts中,可以通过多个饼图系列(series)来实现仪表盘形式的进度条,如下图,需要通过以下几个饼图组合来完成。 一个饼图用于进度条背景底色(未完成部分);一个饼图用于进度条颜色&…

调用钉钉接口发送消息

调用钉钉接口发送消息 通过创建钉钉开放平台创建H5小程序,通过该小程序可以实现向企业内的钉钉用户发送消息(消息是以工作通知的形式发送) 1、目前仅支持发送文本消息,相同内容的文本只能成功发送一次,但是接口返回发…

上传文件(vue3)

使用el-upload 先上传到文件服务器&#xff0c;生成url 然后点击确定按钮&#xff1a; 保存数据 <template><el-dialog top"48px" width"500" title"新增协议" :modelValue"visible" close"handleClose()">…

【LeetCode】52、N 皇后 II

【LeetCode】52、N 皇后 II 文章目录 一、递归 数组解法1.1 递归 数组解法1.2 多语言解法 二、位运算解法1.1 位运算解法2.2 多语言解法 一、递归 数组解法 1.1 递归 数组解法 // go func totalNQueens(n int) int {return f(n, 0, make([]int, n)) }// 在 [0...i-1] 行已摆放…

nodejs:nodejs的技巧有哪些

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它允许开发者构建高性能的网络应用。 1.使用 require 语句时&#xff0c;尽量使用绝对路径避免模块路径冲突。 例如&#xff1a; const _ require(/path/to/your/module); 2.使用 npm 时&#xff0c;可…

Centos创建共享文件夹拉取文件

1.打开VMware程序&#xff0c;鼠标右检你的虚拟机&#xff0c;打开设置 2.点击选项——共享文件夹——总是启用 点击添加&#xff0c;设置你想要共享的文件夹在pc上的路径&#xff08;我这里已经添加过了就不加了&#xff09; 注意不要中文&#xff0c;建议用share&#xff0c…

[计算机网络]唐僧的”通关文牒“NAT地址转换

1.NAT&#xff1a;唐僧的通关文牒 在古老的西游记中&#xff0c;唐僧师徒四人历经九九八十一难&#xff0c;终于取得了真经。然而&#xff0c;他们并不是一开始就获得了通关文牒&#xff0c;而是经过了重重考验&#xff0c;最终得到了国王的认可&#xff0c;才顺利通过了各个关…

贪心算法 part01

class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) { // 取区间累计的最大值&#xff08;相当于不断确定最大子序终止位置&#xff…