CURTLab / LVGLBuilder

GUI Builder for littlevgl.
MIT License
452 stars 141 forks source link

問題回報 #20

Open d985201002 opened 3 years ago

d985201002 commented 3 years ago

我使用的版本是 v1.0.3 這個 branch 有幾個比較重要的問題想回報給你 使用環境: Win10 64 bit

  1. Style Editor 設定參數時 , 若 default state 預設是 0 的參數 (例如 button 的 outline opa) , 去設定其他 state 像是 focused pressed 的相同參數時, 會被覆蓋回 default state 的值 , trace code 後 , Builder get / set 不同 state 的 lvgl style property 的方式應該有點錯誤

  2. message box 模擬時 , 若有button存在 , 按下去會自動消失( 此時 lv_msgbox 會自動 del obj) , 所以會造成崩潰 , 按下 button 消失是 message box 內部預設的 event callback 行為 , create lv_msgbox 後 , 最好重新設定一個空的 event 避免自動關閉

  3. Widget Box 的 resize 方式有點不正常 , 當 ListItem 是關閉狀態時 , 輸入 filter 後 打開關閉tool button 就會顯示異常

  4. 加入一個 parent widget , 拉兩個 child widget 進去後 , 從新到舊的順序刪除 widget 會造成崩潰 , 這個問題是由於 object model LVGLObjectModel::parent 這個 fucntion 存取到已經被刪除的 object 所以崩潰 , 而且和 object inspector 的treeview 有沒有 set object model 有關 , 原因是甚麼還不曉得

  5. Keyboard的mode property enum 沒有對齊 lvgl 7.11

  6. Bar / Slider 等用到 max / min 的 widget 若 max = min 會崩潰 , min 應該要判斷 < max

  7. list widget 的 item 每次設定完 icon , 重新編輯都會只剩下 item name , icon被重置

  8. 加入font 若選擇的是 1 bpp , 字體會明顯不正確

mrQzs commented 3 years ago

第一个问题是因为很多部件没有多种状态,所有设置其他状态都是无效的。 第二个问题,这个确实会崩溃,因为事件功能是后面加入的,没有去解决。 第三个问题,一直没测试过filter的功能,原来还有这个bug。 第四个问题,这个问题,你看下我1.03之后的几次提交,不涉及ui界面的提交。主要还是删除之后,对象框的数据没有清空,导致再点击时,就会崩溃。 第五个问题,因为很多组件我实际开发都没有用到,所有很多组件没有去完善。 第六个问题,这个也没注意。 第七个问题,list组件也是我还没有去完善 第八个问题,那个字体设置功能,目前不推荐使用,不支持中文,而且少了一些地方的设置。推荐官方lvgl的字体转换。也可以官方转换后去替换我的chinese字体。记得加入awesome字体库就行。

mrQzs commented 2 years ago

我现在移植到Qt6版本,后面一些问题我应该回抽时间完成。如果你还有其他问题发现,欢迎你提出来。

d985201002 commented 2 years ago

謝謝你的回覆

關於第一點 雖然每種控件能支持的狀態不一定, 但不影響能否設定 (意思就是每種控件的每種狀態都要能設定 而不會被覆蓋回去) 而我說被覆蓋的問題, 也無關控件是否支持 , 因為 focus 狀態應該每種控件都能支持 主要問題還是在於 LVGLBuilder 設定 style 屬性的方法需要修改 (很抱歉我目前手邊沒有工作電腦 , 之後會再貼上修正的代碼)

第二個問題, 我描述的可能不夠好 我指的是 message box 這個控件 , 當拉進去視窗後, 透過仿真的方式按下 message box 的 button 後會自動消失 消失後作其他動作就有可能會崩潰

原因是因為 LVGL 的 message box create時有個預設的行為 , 就是按下會顯示消失動畫後自動 delete object 但 Qt 這邊並不會知道還保留著同樣的pointer address導致非法存取 , 要取消這個行為必須要在 create 時重新複寫 message box 的 event callback (空的 function 即可)

第三個問題 我 trace 過 code 之後 , 發現是 resize Widget Box 的 height 是用 hard code 的 , 可能有計算誤差導致異常 , resize的部分最好利用 Qt 的 layout 屬性自動調整即可

第四個問題 我不曉得卻切的原因,只知道在哪裡崩潰的, 你可以複製看看, 後來我用 workaround 的方式避掉的

另外再補充 lv_spinner 的部分 , 可能因為你比較少用到 所以可設置元件屬性沒有補上去 lv_spinner 應該是要不間斷的一直轉動 (內建不停止的動畫), 但在仿真結束後 , spinner 就再也不會轉動 後來發現因為仿真結束時使用 lvgl api 把所有 animation 一次清掉 , 所以 lv_spinner 也跟著被清掉

雖然 LVGLBuilder 有蠻多待修正的問題 , 但還是有著不錯的核心 , 感謝你對 LVGL 開源的貢獻 我提出的問題都是我基於 v1.0.3 自行修正的 , 之後會再整理代碼的部分貼出來

mrQzs commented 2 years ago

你也可以pull request,我合并。因为这个项目不是我创建的,所以我给不了你权限,不然让你直接修改代码提交会比较快。 后面我准备将一页页的page作成树形结构,然后一个工程/项目作为一个整体对象,而不是每个page都是一个整体对象。还有删除对象导致程序崩溃是因为那个树形model没写好,我准备重写.这个项目的模板还是MVC设计都很不错,但是属性类和样式类,还是有局限,我去扩充后,发现还是有点问题. 这次我负责的项目和现在这个类似,我从头设计和实现我负责的项目时,发现了这个项目的一些问题,所以我就准备来修正.也就自己重新设计和实现类似的东西时候,才能看清问题.我当时只管功能实现,很难发现这些bug.

d985201002 commented 2 years ago

还有删除对象导致程序崩溃是因为那个树形model没写好,我准备重写 -> 這個部分希望能看到解法 , 想合回我的代碼裡

你負責的項目會是一個新的專案 ? 還是新的 branch ? 對應 的LVGL lib 的版本還是 v 7.11 嗎 ?

mrQzs commented 2 years ago

没问题,因为开始过年放假了。 我负责的不是基于LVGL的,我负责的项目也是类似于这种人机交互软件,不过是工业自动化的那种人机交互软件了。lvgl版本会更新到最新版本,但是我之前项目里的lib应该不会更新了,因为那个是arm架构芯片编译器去编译的,我现在没有测试的板子了,但是那个编译lib的脚本基本不用改变就能使用了。

mrQzs commented 2 years ago

内存泄漏: 第一个问题在于 lvglobject这个类的析构函数没有去删除他的子类,而是lvgl类的删除obj函数来执行(最早版本这里用递归,程序崩溃就在这里,因为那个递归函数的数组的size()是动态变化的) 第二个问题在于原本有父类的对象也被添加到lvgl的lvglobject数组里面,即顶层对象数组。(我当时居然没发现到其实不应该这么做) 第三个问题在于原本不需要lvgl来存储lvglobject顶层对象数组,只需要lvglobject的model有个root对象(即根对象),那么就可以获取到整个树的任意对象,而且删除还是添加,都有model来实现是最安全的.

目前第一个问题和第二个问题我都解决了,也基本解决内存泄漏了。至于第三个问题,其实属于设计问题,因为是最后才设计objectModel,这导致对象的删除添加都是在lvglsimulate类来间接处理,最后交由lvlg类来处理。再加上没有考虑到对树形结构没有了解透彻,所以埋下了很多坑。

mrQzs commented 2 years ago

解决完上面的问题后,还发现model的一处问题,objectmodel的parent虚函数有问题,本来应该是返回child的父对象的index,但是代码返回的其实是自身的index。。。 可见当时我对mvc的视图设计还是不太明白,所以都没发现这些问题。。。。

mrQzs commented 2 years ago

纠正下: 非法访问对象造成的程序崩溃问题被我说成 内存泄漏了(lol)

qyq001 commented 2 years ago

label 控件无法改变大小

mrQzs commented 2 years ago

我有时间的时候修复下label的问题. 主要1.04有很多新添加的功能,然后又没时间测试,加上工作一堆事情,令人头大orz