Я раньше не использовал QGLWidget, но, просмотрев несколько предоставленных вами вещей и документов, вы, вероятно, захотите:
- Убедитесь, что отслеживание мыши включено на gl widget object.
- Убедитесь, что у вас есть функция, подключенная к gl widgets. Функция paintEvent
- Получите положение мыши
- Создайте QVector со всеми объектами в сцене.
- Создайте QVectorIterator для итерации по всем объектам в сцене.
- Приведение / преобразование каждого из 3D-объектов, положение которого преобразуется в пространство экрана, затем вычисляется добавление дельты к набору (возможно, даже для dict с {delta: qglobject}). Следите за самой низкой дельтой.
- Выберите объект с помощью my_objects [low_delta] и выполните свои операции.
Я никогда не использовал это раньше, поэтому могут быть некоторые классы и методы, которые сделают большую часть этого за вас, изучите их. Если вы собираетесь отображать множество объектов на экране, вам может потребоваться какое-то кеширование / запоминание для повышения производительности. Одна вещь, которая может помочь, - это создание dict из отсортированных дельт для каждого объекта из источника / центра gl_widget, а затем использование двоичного поиска для поиска ближайших объектов к позиции вашей мыши.
Проверьте некоторые из них:
https://doc.qt.io/qt-5/qglwidget.html
https://doc.qt.io/qt-5/qglwidget.html#paintEvent