Legacy QGLWidget
может быть интегрирован с библиотеками рендеринга (например, SFML) путем передачи winId()
результата в библиотеку рендеринга. Но я не могу так работать QOpenGLWidget
. Сделав его MainWindow
в центральном виджетах, я получаю ряд предупреждений, таких как QOpenGLWidget cannot be used as a native child widget. Consider setting Qt::AA_DontCreateNativeWidgetAncestors and Siblings.
. Кроме того, в документации говорится: «QGLWidget, с другой стороны, использует собственное окно и поверхность. (...) QOpenGLWidget избегает этого, не создавая отдельное собственное окно.». Может ли QOpenGLWidget
быть интегрирован с сторонним программным обеспечением OpenGL вообще, или он не поддерживается сейчас?Может ли QOpenGLWidget быть интегрирован с сторонней библиотекой OpenGL?
2
A
ответ
3
Вам нужно создать QWindow
, инициализировать его и интегрировать в приложение с QWidget::createWindowContainer
class MyNativeWindow : QWindow
{
MyNativeWindow() : QWindow
{
setSurfaceType(QWindow::OpenGLSurface);
}
};
MyNativeWindow *nativeW = new MyNativeWindow();
QWidget *w = QWidget::createWindowContainer(nativeW);
// Use w as a simple QWidget
В некоторых случаях вам не нужно использовать, чтобы получить winId
HWND
. Достаточно знать идентификатор контекста OpenGL. Для пользовательской манипуляции с контекстом gl вы можете использовать класс QOpenGLContext
.
Будьте осторожны, потому что, если ваши сторонние библиотеки сами создадут собственные окна (в OS X), у вас будет много ошибок с Qt. Мы привязаны для исправления ошибок в нашем проекте. (Неблокируемые доки, потеря клавиатуры, невозможность открытия меню, ошибки в полноэкранном режиме и т. Д.)
Вы можете посмотреть на это code sample. И пользовательский контекст code sample.
Смежные вопросы
- 1. Может ли node.js быть интегрирован с php?
- 2. Может ли nServiceBus быть интегрирован в Winform?
- 3. QOpenGLWidget с общим контекстом OpenGL?
- 4. Может ли pubnub быть интегрирован с рельсами, предназначенными для аутентификации?
- 5. Может ли gsm-модем быть интегрирован с веб-сервером?
- 6. Может ли gSoap быть интегрирован с движком Google?
- 7. Статическая связь с сторонней библиотекой non-pic
- 8. Qt OpenGL (QOpenGLWidget) - Простой треугольник
- 9. Как этот Javascript может быть правильно интегрирован
- 10. Может VisualVM быть интегрирован в NetBeans
- 11. Может ли whatsapp быть интегрирован в концентратор обмена сообщениями?
- 12. Какова может быть проблема с этой библиотекой?
- 13. Как сервер приставок может быть интегрирован с сервером Apache?
- 14. Воспроизведение звука на iPhone, декодированное сторонней библиотекой
- 15. Как избежать влияния CSS сторонней библиотекой?
- 16. Настройка OpenGL в Qt для QOpenGLWidget
- 17. Насколько интегрирован Collada в OpenGL ES
- 18. QOpenGLWidget без подкласса
- 19. JavaScript minifyer, который может быть интегрирован со сборкой приложения ASP.NET
- 20. Является ли OpenGL API или программной библиотекой?
- 21. Может ли WindowTester быть интегрирован с каким-либо другим инструментом, чтобы заставить его работать с Android?
- 22. угловой 2 проблемы с веб-пакетом с сторонней библиотекой
- 23. Может ли GTK работать с библиотекой readline?
- 24. Сопоставление двух одинаковых классов в java с сторонней библиотекой
- 25. Проект iOS arm64 с 32-битной сторонней библиотекой
- 26. Может ли WSO2 Identity Server быть интегрирован с существующей базой CAS?
- 27. Может ли Shibboleth быть интегрирован с Windows Azure Access Control Service?
- 28. CakePHP - Не удается переопределить класс, конфликтующий с сторонней библиотекой
- 29. Qt: рендеринг текста в QOpenGLWidget
- 30. Расширение PHP по сравнению с библиотекой (и может быть преобразовано)
Вторая ссылка (образец пользовательского контекстного кода) больше не работает. –
Спасибо за образец кода, это приведет меня к правильному пути. В моем случае есть постоянное переключение между двумя сторонними зрителями. Один из них основан на QOpenGLWidget, в то время как другой просто берет 'winId()' виджета, чтобы сделать свою магию. Мне потребовался почти день проб и ошибок, чтобы выяснить способ переключения между ними и использования их функций. Я поместил объект MyNativeWindow в контейнер окна, как описано, и, кроме того, чтобы использовать «winId()» окна для стороннего зрителя, мне пришлось «show()» и «hide»() «родительский виджет» ('w 'в вашем случае) соответственно. –
@FranzB. он был удален во время рефакторинга. Можно получить фиксацию на 28 марта для источника. –