日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vb checkbox选中和不选中_UE4 4.23 RetainerBox 选中框位置不正确

發布時間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vb checkbox选中和不选中_UE4 4.23 RetainerBox 选中框位置不正确 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Bug表現

在UE4 4.23版本,實現自定義控件時,繼承了RetainerBox,發現當內部包裹子控件時,先編輯器面板選中子物體,發現選中位置有偏移。

位置偏移

當窗口縮放時,選中框位置

發現當窗口最小化時,偏移位置更加明顯,感覺這個選中框跟整個window的位置有關了。

定位問題

使用UE4工具“控件反射器”,定位到UI編輯器頁面是在源碼"SDesignerView.cpp"中

查找頭文件,發現有個關鍵函數“DrawSelectionAndHoverOutline”此函數就是畫出Slate控件選中邊框的關鍵函數。

看看此函數具體實現為:

對選中SelectedSlateWidget,

調用“FDesignTimeUtils::GetArrangedWidgetRelativeToWindow(Widget, ArrangedWidget)”

然后生成SelectionGeometry,并根據此Geometry生成SelectionZone也就是選中框范圍,根據SelectionZone的4個頂點調用FSlateDrawElement::Makelines畫出選中控件的邊緣框。

推測是原因Widget的Geometry錯誤。 FDesignTimeUtils::GetArrangedWidgetRelativeToWindow此函數的計算方法不對,導致返回的Geometry有誤差。

跟蹤此方法:

GetArrangedWidgetRelativeToWindow作用是,通過傳入的Widget通過FindWidgetWindow找到它的最上層WidgetWindow,然后通過最上層window計算傳入Widget的Geometry。

通過斷點調試,CanvasPanel和RetainerBox子物體選中時函數執行狀況。發現問題:

正確的Window

錯誤的Window

正確的情況下,FindWidgetWindow會找到傳入Widget的最外層Window,但是在RetainerBox中,它返回了一個SVirtualWindow,它是SRetainerWidget內部的Window,并非最外層Window,導致計算的Geometry出錯了。

修改方法

修改"DesignTimeUtils.cpp"中的GetArrangedWidgetRelativeToWindow方法,根據傳入的Widegt,循環找到最外層的正確方法,如下

修改方法

在38行,增加一個循環找到最外層Window的方法,賦值給WidegetWindow。修改后RetainerBox的選中框能正確顯示了

后續

在UE4官方GitHub源碼庫中了解到,之前也有其他開發者報告了此問題,后續官方會在4.24中修復,官方會用一個更好的方法進行修復。

https://github.com/EpicGames/UnrealEngine/pull/6402

RetainerBox DrawSelectionAndHoverOutline SelectionZone Incorrect in DesignerView

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的vb checkbox选中和不选中_UE4 4.23 RetainerBox 选中框位置不正确的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。