Qt3DRender::QObjectPicker Class

class Qt3DRender::QObjectPicker

QObjectPicker 类实例化了一个组件,可用于通过称为 "拾取 "的过程与 QEntity 进行交互。更多

头文件: #include <QObjectPicker>
CMake: find_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
qmake: QT += 3drender
在 QML 中: ObjectPicker
继承: Qt3DCore::QComponent
状态:已废弃

属性

公共功能

bool containsMouse() const
bool isDragEnabled() const
bool isHoverEnabled() const
bool isPressed() const
int priority() const

公共插槽

void setDragEnabled(bool dragEnabled)
void setHoverEnabled(bool hoverEnabled)
void setPriority(int priority)

信号

void clicked(Qt3DRender::QPickEvent *pick)
void containsMouseChanged(bool containsMouse)
void dragEnabledChanged(bool dragEnabled)
void entered()
void exited()
void hoverEnabledChanged(bool hoverEnabled)
void moved(Qt3DRender::QPickEvent *pick)
void pressed(Qt3DRender::QPickEvent *pick)
void pressedChanged(bool pressed)
void priorityChanged(int priority)
void released(Qt3DRender::QPickEvent *pick)

详细说明

对于视口和摄像头的每种组合,picking 都会在场景中投射一条射线,以查找与射线相交的实体边界体。边界体积是使用几何体的边界体积位置属性(boundingVolumePositionAttribute)指定的属性缓冲区中的值计算得出的。

当 pickAttribute 属性定义的包围体与射线相交时,会发出pressed(),released(),clicked(),moved(),entered() 和exited() 信号。

大多数信号都带有一个QPickEvent 实例。如果 QPickingSettings::pickMode() 设置为QPickingSettings::TrianglePicking ,则选取参数的实际类型将是QPickTriangleEvent

鼠标按下和松开时都会执行选取查询。如果启用了拖动,则在按下任何按钮时,每次移动鼠标都会进行查询。如果启用了悬停功能,即使没有按下按钮,也会在每次移动鼠标时进行查询。

有关通用光线投射查询,请参阅Qt3DRender::QRayCasterQt3DRender::QScreenRayCaster

注: 此组件的实例不应共享,否则很可能导致未定义的行为。

注: 相机远平面值会影响拾取,如果大于 ~100 000,则会因浮点精度而产生不正确的结果。

另请参阅 Qt3DRender::QPickingSettings,Qt3DCore::QGeometry,Qt3DCore::QAttribute,Qt3DRender::QPickEvent,Qt3DRender::QPickTriangleEventQt3DRender::QNoPicking

属性文档

[read-only] containsMouse : const bool

指定对象选取器当前是否包含鼠标

访问功能:

bool containsMouse() const

通知信号:

void containsMouseChanged(bool containsMouse)

dragEnabled : bool

指定是否启用拖动

访问功能

bool isDragEnabled() const
void setDragEnabled(bool dragEnabled)

通知信号

void dragEnabledChanged(bool dragEnabled)

hoverEnabled : bool

指定是否启用悬停

访问功能:

bool isHoverEnabled() const
void setHoverEnabled(bool hoverEnabled)

通知信号

void hoverEnabledChanged(bool hoverEnabled)

[read-only] pressed : const bool

指定当前是否已按下对象选取器

访问功能:

bool isPressed() const

通知信号:

void pressedChanged(bool pressed)

priority : int

QPickingSettings::pickResultMode 设置为QPickingSettings::NearestPriorityPick 时,按优先级筛选提取结果时使用的优先级。

访问功能:

int priority() const
void setPriority(int priority)

Notifier 信号:

void priorityChanged(int priority)

成员函数 文档

[signal] void QObjectPicker::clicked(Qt3DRender::QPickEvent *pick)

当 pickAttribute 属性定义的边界体与鼠标点击的射线相交时,就会发出该信号。QPickEvent pick 包含事件的详细信息。

bool QObjectPicker::containsMouse() const

如果对象选取器当前包含鼠标,则返回 true

注: 属性 containsMouse 的获取函数。

[signal] void QObjectPicker::entered()

当 pickAttribute 属性定义的边界体与进入该边界体的鼠标光线相交时,会发出该信号。

[signal] void QObjectPicker::exited()

当 pickAttribute 属性所定义的边界体与射线相交时,从边界体流出的射线会发出该信号。

bool QObjectPicker::isDragEnabled() const

如果启用拖动,则返回 true

注: 属性dragEnabled 的获取函数。

bool QObjectPicker::isHoverEnabled() const

如果启用了悬停功能,则返回 true

注: 属性hoverEnabled 的获取函数。

[signal] void QObjectPicker::moved(Qt3DRender::QPickEvent *pick)

当 pickAttribute 属性定义的边界体在按下按钮移动鼠标时与射线相交时,就会发出该信号,QPickEvent pick 包含事件的详细信息。

[signal] void QObjectPicker::pressed(Qt3DRender::QPickEvent *pick)

当 pickAttribute 属性定义的边界体与鼠标按下的光线相交时,就会发出该信号。QPickEvent pick 包含事件的详细信息。

[signal] void QObjectPicker::released(Qt3DRender::QPickEvent *pick)

当 pickAttribute 属性定义的边界体与鼠标释放的射线相交时,就会发出该信号。QPickEvent pick 包含事件的详细信息。

[slot] void QObjectPicker::setDragEnabled(bool dragEnabled)

dragEnabled 属性设置为dragEnabled

注: 属性dragEnabled 的设置函数。

另请参阅 isDragEnabled().

[slot] void QObjectPicker::setHoverEnabled(bool hoverEnabled)

hoverEnabled 属性设置为hoverEnabled

注: 属性hoverEnabled 的设置函数。

另请参阅 isHoverEnabled().

[slot] void QObjectPicker::setPriority(int priority)

将拣选器的优先级设置为priority 。当QPickingSettings 上的拣选结果模式设置为QPickingSettings::NearestPriorityPick 时使用。拣选结果按最高优先级和最短拣选距离排序。

注: 属性priority 的设置函数。

另请参阅 priority() 。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.