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子物体选中时函数执行状况。发现问题:
正确的情况下,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 选中框位置不正确相关推荐
- jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中
例:将多个选中的checkbox的值组装成一个字符串 <script type=text/javascript> function addMem(){ //var followers = ...
- jquery radio取值,checkbox取值,select取值,radio选中,
jquery radio取值,checkbox取值,select取值,radio选中, var item = $('input[@name=items][@checked]').val(); 获取se ...
- javascript 获取光标所选中的内容并插入到另一个文本框中(兼容ie和ff)
项目中正好用到 做下笔记方便以后查找 ie获取光标的位置使用document.selection.createRange() 火狐下使用document.getElementById(id).sele ...
- vue.js 默认选中select_vue select二级联动第二级默认选中第一个option值的实例
当二级联动比如选择国家的时候,希望选中一个国家的时候后面城市默认选中第一个城市,则给国家的select加一个@change事件就可以了 所在区域 {{item.country}} {{item}} d ...
- jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关...
http://www.cnblogs.com/xlfj521/archive/2008/01/29/1057375.html 获取一组radio被选中项的值 var item = $('input[@ ...
- react antd Table 选中某一行,其它行也被选中了
问题描述: 使用react_antd_design 中的Table组件,渲染的结果如下: 但是现在出现的问题是当我选中其中的一行,其他的行也变成了选中的状态,无法实现选中单行 这当然不是我们想要的结果 ...
- vue.js 默认选中select_vue.js 解决v-model让select默认选中不生效的问题
笔者今天在开发中遇到一个看起来很神奇的问题,平时编辑的页面我们select下拉选框利用vue.js 的v-model来实现自动选中,今天无论如何都选不中,后来经过很久的复查和大神的一句话终于解决这个这 ...
- php 判断radio选中哪个,jquery如何判断单选按钮radio是否选中
jquery判断单选按钮radio是否选中的方法:1.加载页面的时候获取id,代码为[var fs=$("#"+id).val()]:2.点击按钮的时候获取id,代码为[var i ...
- html select设置不选中的值,如何定义 select 默认不选中任何值
http://www.cnblogs.com/greatverve/archive/2010/02/03/1662565.html 本来以为jQuery("#select1").v ...
最新文章
- Java程序员月薪20k的涨薪秘籍:培训班java找不到工作
- 华北水利水电大学计算机研究生调剂,2018年华北水利水电大学硕士研究生相关专业接受调剂公告...
- Linux安装Oracle11G
- HALCON示例程序crystal.hdev通过局部阈值处理和区域处理提取六角形晶体
- order by 影响效率么_提升开发效率N倍的20+命令行神器
- android cpu负载 工具,计算Android中进程的CPU使用率
- Python 爬虫---(6) beautifulSoup 库的使用
- 机器学习从入门到进阶✅
- linux 之学习路线
- Cisco Webex share screen 显示黑屏解决方法
- 3.5mm 音频接口类型说明
- coreldraw怎么改成半圆形_cdr怎么把图形修剪成指定的形状?
- c语言编写用户注册程序,如何用c实现登录和注册的程序?
- python爬取b站视频封面_我发现这个up封面确实有点东西,爬取B站视频的封面图片...
- 小米下拉导航栏,36kr 下拉导航栏解决方法
- Image Pro Plus6进行荧光分析与荧光照片合成学习笔记
- 服务器怎么设置自动连接wifi,笔记本无线网络连接IP地址设置(自动获取IP)
- 普林斯顿算法课Part2第四周作业_Boggle
- 瑞幸创造VC圈神话,风暴中的OYO回应,企鹅杏仁集团完成2.5亿美元融资...
- 均匀分布的均值及方差
热门文章
- 神盾局特工第四季/全集Agents Of SHIELD迅雷下载
- BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )
- C#中yield return用法
- jQuery介绍 DOM对象和jQuery对象的转换与区别
- PHP中的正则表达式函数preg_
- Delphi 对象的创建(create)与释放(free/destory)
- 程序员九重镜界,很老的今天刚刚翻出来
- [Leetcode][第99题][JAVA][恢复二叉搜索树][中序遍历]
- ionic android 本地存储,ionic2/3本地数据存储storage
- 如何去掉文章里的非关键词c++_B2B/B2C网站:文章标题如何写才能促进搜索排名...