UE小:UE5的Pixelstreaming在捕获画面的时候没办法显示非Viewport的Slate区域按钮的ToolTip

devtools/2024/10/19 0:12:56/

原始代码

首先,让我们看看原始代码片段:

// Some widgets might want to provide an alternative Tooltip Handler.
if (bCanSpawnNewTooltip || !NewTooltip)
{TSharedPtr<SWidget> NewTooltipWidget = NewTooltip ? NewTooltip->AsWidget() : TSharedPtr<SWidget>();for (int32 WidgetIndex = WidgetsToQueryForTooltip.Widgets.Num() - 1; WidgetIndex >= 0; --WidgetIndex){const TSharedRef<SWidget>& CurWidget = WidgetsToQueryForTooltip.Widgets[WidgetIndex].Widget;if (CurWidget->OnVisualizeTooltip(NewTooltipWidget)){// Someone is taking care of visualizing this tooltipNewTooltipVisualizer = CurWidget;break;}}
}

修改后的代码

现在,我们来看一下修改后的版本:

// Some widgets might want to provide an alternative Tooltip Handler.
if (bCanSpawnNewTooltip || !NewTooltip)
{TSharedPtr<SWidget> NewTooltipWidget = NewTooltip ? NewTooltip->AsWidget() : TSharedPtr<SWidget>();
#if (UE_BUILD_SHIPPING || UE_BUILD_DEBUG)FVector2D WindowInitialDesiredSize =  SlateApp.GetTopLevelWindows()[0]->GetInitialDesiredSizeInScreen();FVector2D  ViewportSize = SlateApp.GetTopLevelWindows()[0]->GetViewport()->GetSize();FWidgetPath WidgetsUnderCursor = SlateApp.LocateWindowUnderMouse(FVector2D (ViewportSize.X-170,63), SlateApp.GetInteractiveTopLevelWindows(), /*bIgnoreEnabledStatus =*/true, UserIndex);for (int32 WidgetIndex = WidgetsUnderCursor.Widgets.Num() - 1; WidgetIndex >= 0; --WidgetIndex){const TSharedRef<SWidget>& CurWidget = WidgetsUnderCursor.Widgets[WidgetIndex].Widget;if (CurWidget->OnVisualizeTooltip(NewTooltipWidget)){// Someone is taking care of visualizing this tooltipNewTooltipVisualizer = CurWidget;break;}}
#elsefor (int32 WidgetIndex = WidgetsToQueryForTooltip.Widgets.Num() - 1; WidgetIndex >= 0; --WidgetIndex){const TSharedRef<SWidget>& CurWidget = WidgetsToQueryForTooltip.Widgets[WidgetIndex].Widget;if (CurWidget->OnVisualizeTooltip(NewTooltipWidget)){// Someone is taking care of visualizing this tooltipNewTooltipVisualizer = CurWidget;break;}}
#endif
}

主要原因

主要看当前的要显示ToolTip的区域是否有一个SVirtualWindow,如果有就将ToolTip显示在SVirtualWindow之内就行,否则的话NewTooltipVisualizer将不会赋值,导致的后果就是他会新生成一个SWindow,独立于Pixelstreaming的TargetWindow,而Pixelstreaming只捕获TargetWindow画面,所以导致看到的画面中没有ToolTip并且伴随着闪烁,如果显卡能力稍弱一点可能会导致崩溃

image.png

image.png

解决的办法

就是将调用显示ToolTip的逻辑中插入每次都检测一个固定位置,这个固定位置是一定包含SVirtualWindow的就行(比如我就是将WidgetsToQueryForTooltip替换为了我自己通过位置检测的位置获得的FWidgetPath,这个位置是在Viewport中放置的一个按钮)


http://www.ppmy.cn/devtools/126862.html

相关文章

4G、5G通信中,“网络侧“含义

在5G通信中&#xff0c;"网络侧"这个术语可以指代不同的网络元素&#xff0c;具体取决于上下文。通常&#xff0c;网络侧可以包括以下两个主要部分&#xff1a; 基站&#xff08;gNB&#xff09;&#xff1a; 基站是无线接入网&#xff08;RAN&#xff09;的一部分&a…

qt 序列化和反序列化

序列化&#xff1a;QByteArray buffer; QBuffer bufferDevice(&buffer); bufferDevice.open(QIODevice::WriteOnly); QDataStream out(&bufferDevice); out.setVersion(QDataStream::Qt_5_13); 反序列化&#xff1a; void deserialize(const QByteArray &buffer) {…

SSD |(七)FTL详解(中)

文章目录 &#x1f4da;垃圾回收&#x1f407;垃圾回收原理&#x1f407;写放大&#x1f407;垃圾回收实现&#x1f407;垃圾回收时机 &#x1f4da;解除映射关系&#x1f4da;磨损均衡 &#x1f4da;垃圾回收 &#x1f407;垃圾回收原理 ✋设定一个迷你SSD空间&#xff1a; 假…

无头浏览器测试:如何使用 Puppeteer 和 Browserless?

什么是无头浏览器测试&#xff1f; 无头浏览器测试通常指没有头的物体或东西&#xff0c;在浏览器的语境中&#xff0c;它指的是没有 UI 的浏览器模拟。无头浏览器自动化使用 Web 浏览器进行端到端测试&#xff0c;而无需加载浏览器的 UI。 无头模式是一个功能&#xff0c;它…

(42)MATLAB中使用fftshift绘制以零为中心的功率谱

文章目录 前言一、MATLAB代码二、仿真结果画图 前言 在分析信号的频率分量时&#xff0c;将零频分量平移到频谱中心会很有帮助。本例给出绘制以零为中心的功率谱的方法。 一、MATLAB代码 代码如下&#xff1a; f 1; % 余弦波的振荡频率&#xf…

Transformer、BERT以及GPT系列联系

① Transformer使用自注意力机制进行编码和解码&#xff0c;能够处理长序列数据&#xff1b; ② BERT使用掩码语言模型和下一句预测任务进行训练&#xff0c;能够在不同的自然语言处理任务中取得良好的效果&#xff1b; ③ GPT大模型是一种基于自回归模型的语言模型&#xff0c…

Python进阶知识2

Python类和对象 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。 如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象语言的一些基本特征&#xff0c;在头脑里头形成…

86.#include预处理命令(1)

目录 一&#xff0e;#include预处理命令 二.扩展 三.视频教程 一&#xff0e;#include预处理命令 #include 也是C语言预处理命令的一种。也叫做文件包含命令&#xff0c;用来引入对应的头文件&#xff08;.h文件&#xff09;。 如何使用&#xff1f; 举例&#xff1a; 在…