C_and_CPP 板


LINE

Qt 已经很久没摸了 但看到你最後一段写 「有许多外部UI需要更新」 感觉就只是利用UI framework的event system可解决 所有的UI framework都会设计event system 用来处理UI update/render/key inputs等等 Qt太久没用但我觉得一定有啦 命名不外乎eventXXX之类的吧 而且理论上会嵌在UI最基础的元件之内 贯穿整个视窗系统的设计 然後可能还得提供filter之类的功能 免得message过多每个元件都狂反应 而且这类设计通常还有一套遍历子元件的逻辑 当你新增UI元件的时候 其实framework老早就把它们串在一起 还规定了他们响应event的流程跟逻辑 如果你还需要自订事件 系统也会有一套自订事件的现成设计 但是imgui那类的framework可能例外 这类小框架可能比较倾向于改变state去重画外观 你最好把Qt好好耐心看一遍教学 基本上这类framework一通百通 几乎都大同小异 即使忘了你也可以猜到怎麽做 你用sigslot的方式硬干去更新UI 就表示应该没仔细去读过文件教学 不然就是你把业务逻辑散到各UI去了 表示在设计上也是有点问题 建议你把业务和资料放到最上层app里面 (额外封装成control也行) 提供许多业务slot让元件去connect 每个元件新增都知道自己需要连结什麽slot 而UI处理的部分就完全走系统那一套 这样需要更新UI的slot function 只要把讯息send or paot到app的msg queeu app就会在适当的时候自动派发讯息 给所有挂在他底下的UI物件 处理讯息的逻辑你可以放在UI小物件里 (高概率是什麽xxxEventHandler) 这样的好处是什麽? 通常app都是global instance 你可以在任何地方取得app 当然就可以取得业务slot和control 每个自订的UI元件可以暴露signal 当在生成所有UI物件的时候 就可以connect(在UI construtor内或app内) 也可以在slot里动态的connect/disconnect 因为slot可以完全知道是谁呼叫的 (有可能需要dynamic cast or object id) 透过sigslot你就把UI串接业务搞定 而业务统一在control or app层处理 处理之後透个系统event system 通知UI遍历传递讯息 UI再由event handler处理update/render/redraw 至於编译速度的问题 由於改动slot内部的程式码 只会让app底下业务的部分重新编译 但是由於slot/signal没有改变 不会重新编译相关的物件 也不会重新编译event system的部分 ※ 引述《liu2007 (薯)》之铭言: : 我的开发平台是 win7 : 工具是QT Creator : 版本是Qt Core 5.15.2 : 有个问题困扰我很久,不知道该怎麽写才好 : 故来请教比较好的写法是什麽 : 在开始问问题之前想要说明的是 : 下面我会用到阿公、父亲、儿子的说法其实不是很准确 : 只是单纯我自己用来说明什麽class 包含 什麽 class的用词 : 如果造成混淆请见谅。 : 例如 class Father里面有一个class Child 的 property : 而 class GramPa 里面有一个 class Father 的 property : 以下自行理解的解决方法是素人方法 : 太菜还请见谅 : 如果两个Child物件要沟通没有问题 : 把一方的signal和slot给connect()起来就好 : 这也是最基础的写法。 : 只要知道两个Child的pointer就好。 : 如果是祖孙沟通 : 对於 Father 来说 : 就必须要有 GramPa 和 Child的pointer才能进行connect : 对 Father 来说,Child 是自己制造或是本来自己的 property所以没问题 : GramPa 的话 : 1.除非本来就有写一个 getParent()来认亲,要不然 : 2.只能一开始在生成 Father的时候在建构子里面塞 GramPa 的pointer : 3.或者是如果 GramPa 伟大到整个program只会有一个 GramPa 的话 : 也可以用 singleton来取得 GramPa 的pointer : 但如果祖孙的距离不只一层呢? : 如果是上述的方法1或方法2 : 会变成每一层都多一个parent pointer 的 field : 每一层的建构子都要都要多塞一个parent的pointer,在new 的时候也要把this丢进去 : 然後每一层的slot都只干一件事情,就是emit signal给上层 : 这样一来写了一堆很重复很累赘的程式码只为了传递一个讯号 : 取名也很头痛,通常会取很相近的名字, : 如果这之中有bug出现,还要定睛去看到底是哪一层传错,很累。 : 似乎只能用上述的方法3 singleton,也就变成必须要include GramPa.h : 程式多多少少搞得臃肿,如果GramPa.h有改的话还拖累编译的速度 : 我不知道我问的是否清楚(因为我要上班了,有点慌乱在乱打文章) : 我的程式有很多那种某个小功能按钮按下去之後要叫很外面的UI做动作的地方 : 想知道该怎麽做比较好 : 感谢阅读 ----- Sent from MeowPtt on my iPhone --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.166.249.176 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1657744649.A.10B.html
1F:推 milkdragon: 说得很好,推~ 07/16 09:55







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP