qt使用camke時,采用vcpkg工具鏈設置OSG的qt模塊osgQOpenGLWidget

【免費】osgQOpenGLWidget嵌入qt模塊,VS2022使用cmake的方式,工具鏈vcpkg資源-CSDN下載

CMake中設置

1.查找osg相關的庫,同時也會設置對應include的路徑

# 檢查是否找到 osg
find_package(OpenSceneGraph 3.6.5REQUIRED COMPONENTS osgosgUtilosgGAosgViewerosgDBosgAnimationosgManipulatorosgParticleosgPresentationosgShadowosgSimosgTerrainosgTextosgVolumeosgWidget#osgUIosgQt
)
if(OpenSceneGraph_FOUND)#message(STATUS "Found osg lib: ${OPENSCENEGRAPH_LIBRARIES}")#message(OSGDB_FOUND=${OSGDB_FOUND}, ${OSGDB_INCLUDE_DIR}, ${OSGDB_LIBRARY})#message(OSGGA_FOUND=${OSGGA_FOUND}, ${OSGGA_INCLUDE_DIR}, ${OSGDA_LIBRARY})#message(OSGQT_FOUND=${OSGQT_FOUND}, ${OSGQT_INCLUDE_DIR}, ${OSGQT_LIBRARY})message(OPENSCENEGRAPH_FOUND=${OPENSCENEGRAPH_FOUND}, ${OPENSCENEGRAPH_INCLUDE_DIR}, ${OPENSCENEGRAPH_LIBRARIES})
else()message(FATAL_ERROR "osg not found!")
endif()

為了保證這個頭文件#include <osgQOpenGL/osgQOpenGLWidget> 能正常,還得在cmake中重新包含一下,不知道為什么???

2.重新將vcpkg的頭文件在設置一遍

#獲取vcpkg的路徑
set(VCPKG_PATH1 "$ENV{VCPKG_PATH}/installed/x64-windows/include") #設置使用vcpkg的路徑include_directories(${VCPKG_PATH1})

3.鏈接lib庫

target_link_libraries(${DemoName} PRIVATE${OPENSCENEGRAPH_LIBRARIES} 
)

4.添加osg插件到對應exe同路徑下(沒有插件dll,osgDB::readNodeFile指令讀取文件時就會為NULL了,卻不報缺少的dll插件,通過調試源碼發現(這也是為什么在vcpkg中的bebug文件中的pdb文件不要輕易刪掉,在需要調試源碼時,這個就派上用場了),底層依賴插件的dll.也可以直接將整個osgPlugins-3.6.5自己手動復制過去,或者將該路徑設置到系統環境變量中,這也是有些文章提到的設置方法.根本的東西就是整個插件dll要在正確的位置)

qt的插件的模塊vcpkg會自動根據cmake配置來加載進去,osg的好像得手動添加入.

#將osg的插件文件復制到對應的調試文件夾中
#根據對應lib文件的路徑.同路徑下的plugins文件中的osgPlugins-3.6.5文件夾中的dll文件都復制過去# 判斷生成的是debug還是release版本,根據 CMAKE_BUILD_TYPE 選擇庫if(${CMAKE_BUILD_TYPE}  STREQUAL "Debug")set(OSG_PLUGINS_DIR "$ENV{VCPKG_PATH}/installed/x64-windows/debug/plugins/osgPlugins-3.6.5")
elseif(${CMAKE_BUILD_TYPE}  STREQUAL "Release")set(OSG_PLUGINS_DIR "$ENV{VCPKG_PATH}/installed/x64-windows/plugins/osgPlugins-3.6.5")
else()message(FATAL_ERROR "Unknown build type: ${CMAKE_BUILD_TYPE}")
endif()#遍歷osg插件文件夾中的dll
# 遍歷DLL文件
file(GLOB_RECURSE OSG_PLUGIN_FILES"${OSG_PLUGINS_DIR}/*.dll"
)#創建osgPlugins-3.6.5文件夾
add_custom_command(TARGET ${DemoName} POST_BUILDCOMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${DemoName}>/osgPlugins-3.6.5"COMMENT "creat file: $<TARGET_FILE_DIR:${DemoName}>/osgPlugins-3.6.5"
)# 復制到對應文件夾中
foreach(OSG_PLUGIN_FILE IN LISTS OSG_PLUGIN_FILES)add_custom_command(TARGET ${DemoName} POST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy"${OSG_PLUGIN_FILE}""$<TARGET_FILE_DIR:${DemoName}>/osgPlugins-3.6.5"COMMENT "Copying ${OSG_PLUGIN_FILES} to $<TARGET_FILE_DIR:${DemoName}>/osgPlugins-3.6.5")
endforeach()

5.將osgQt的查找模塊文件改為osgQOpenGL

在osg3.6.5中,osgQt已經分離為單獨的子項目,其146版本使用了QOpenGL,其使用的頭文件與生成的庫與舊版osgQt相比,都發生了變化。需要對findosgqt.cmake文件進行修改,才能正常使用find_package(osgQt)或find_package(OpenSceneGraph 3.6.5 REQUIRE osgQt)。

參考文章:
使用CMake查找osgQt_qt項目cmakelist怎么找osg庫-CSDN博客

C:\Program Files\CMake\share\cmake-4.0\Modules中找到FindosgQt.cmake ,根據cmake版本來查找

``OSGQT_LIBRARY_DEBUG``The osgQt debug library``$OSGDIR`` is an environment variable that would correspond to::./configure --prefix=$OSGDIRused in building osg.Created by Eric Wing.  Modified to work with osgQt by Robert Osfield,
January 2012.
#]=======================================================================]# Header files are presumed to be included like
# #include <osg/PositionAttitudeTransform>
# #include <osgQt/GraphicsWindowQt>include(${CMAKE_CURRENT_LIST_DIR}/Findosg_functions.cmake)
#OSG_FIND_PATH   (OSGQT osgQt/GraphicsWindowQt)
#OSG_FIND_LIBRARY(OSGQT osgQt)
#20250914
OSG_FIND_PATH   (OSGQT osgQOpenGL/osgQOpenGLWidget)
OSG_FIND_LIBRARY(OSGQT osgQOpenGL)include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(osgQt DEFAULT_MSGOSGQT_LIBRARY OSGQT_INCLUDE_DIR)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/97873.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/97873.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/97873.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

洛谷 P2245 星際導航(kruskal 重構樹 + 倍增優化求路徑最大邊權)

題目鏈接 題目難度 洛谷上是藍題&#xff0c;我覺得這道題挺簡單的&#xff0c;一眼就看穿了&#xff0c;應該是綠題。 題目解法概括 kruskal 重構樹 倍增優化求路徑最大邊權。 代碼 #include <iostream> #include <vector> #include <algorithm> #in…

STM32H743-ARM例程1-IDE環境搭建與調試下載

目錄實驗平臺環境搭建一、Keil MDK集成開發環境1.MDK簡介2.MDK5安裝3.程序下載與調試二、STM32CubeMX1.STM32CubeMX簡介2.JAVA JRE安裝3.STM32CubeMX安裝4.STM32CubeH7庫安裝實驗平臺 硬件&#xff1a;銀杏科技GT7000雙核心開發板-ARM-STM32H743XIH6&#xff0c;銀杏科技iTool…

FPGA學習篇——Verilog學習MUX的實現

PS&#xff1a;目前手上仍然沒有板子&#xff0c;按照野火視頻的講解&#xff0c;目前我們只能做到前面六步&#xff08;其實第一步設計規劃也是需要看板子的硬件的&#xff0c;但是現在沒有板子就完全與野火傳授的板子一致來看&#xff09; 首先我們以最簡單的2路選擇器MUX2_1…

OpenStack 學習筆記

OpenStack 1. 什么是 OpenStack 1.1 OpenStack 發展史 2006 年亞馬遜推出 AWS&#xff0c;正式開啟云計算的新紀元 2010 年 7 月美國國家航空航天局&#xff08;NASA&#xff09;與 Rackspace 合作&#xff0c;共同宣布 OpenStack 開放源碼計劃&#xff0c;由此開啟了屬于 Open…

mysql小數取整

1 向下取整 SELECT FLOOR(123.456); -- 結果: 1232 向上取整 SELECT CEIL(123.001); -- 結果: 1243 四舍五入 SELECT ROUND(123.456); -- 結果: 123 SELECT ROUND(123.556); -- 結果: 1244 截斷&#xff08;不四舍五入&#xff0c;直接截斷小數位&#xff09; SELECT …

Day43 PHP(mysql不同注入類型、mysql不同注入點、mysql傳輸不同數據類型 )

一、不同注入類型實際&#xff1a;我們未知sql是哪種類型&#xff0c;只能靠試/使用sql工具原理&#xff1a;閉合程序員寫的sql語句&#xff0c;并且執行我們所需要的sql語句&#xff0c;最后將閉合后多余的 用-- 或者#注釋掉。 總結一下就是先閉合&#xff0c;后注釋。共四種…

Linux應用開發(君正T23):三網智能切換及配網功能

前段時間接手了一個監控項目&#xff0c;其中甲方對于設備的要求有一條就是實現網口eth、WiFi、4G三種手段的聯網方式并且當某一個網絡不好的時候就去切換到下一個能用的網絡&#xff0c;讓監控設備持續不斷的有網絡&#xff0c;保證監控數據的上傳。這個部分的功能就交由我來實…

IvorySQL 4.6:DocumentDB+FerretDB 實現 MongoDB 兼容部署指南

背景 MongoDB 誕生之初&#xff0c;便以出色的易用性與詳盡的驅動程序文檔脫穎而出&#xff0c;堪稱對傳統關系型數據庫的一次重要革新&#xff0c;也正因如此&#xff0c;它迅速成為開發者社區的熱門之選。 然而&#xff0c;隨著其許可模式從開源轉向 SSPL 許可證&#xff0…

論文閱讀:arixv 2025 One Token to Fool LLM-as-a-Judge

總目錄 大模型相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2507.08794 https://www.doubao.com/chat/20698287584991234 速覽 這篇文檔主要講了一個關于“大語言模型當裁判”的重要發現——很多我們以為靠譜的AI裁…

webrtc弱網-AlrDetector類源碼分析與算法原理

AlrDetector&#xff08;應用受限區域檢測器&#xff09;是WebRTC中用于檢測發送端是否處于應用層限速狀態的核心組件。它通過維護一個基于時間間隔的預算系統&#xff0c;監控實際發送數據量與網絡容量之間的關系。當發送速率持續低于網絡容量的設定比例&#xff08;如65%&…

ABP + Verify(快照) 驅動的 PDF/Excel 導出回歸

ABP + Verify(快照) 驅動的 PDF/Excel 導出回歸 ?? ?? 目錄 ABP + Verify(快照) 驅動的 PDF/Excel 導出回歸 ?? 0) TL;DR ? 1) 背景與目標 ?? 2) 架構與職責(解耦渲染器) ?? 3) “確定性”前置條件(去偽差異) ?? 4) PDF 回歸策略(以 QuestPDF 為例) ?? 4.…

SIFT特征匹配實戰:KNN算法實現指紋認證

這個利用了前面學到的SIFT特征檢測來實現的&#xff0c;然后這里主要就是引入了一個新的匹配器。這里匹配是用KNN算法進行匹配的。下面來看下細節。介紹函數由于要頻繁展示&#xff0c;所以這里定義了一個函數。def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)導入…

網絡安全滲透測試第一步信息收集

信息收集是滲透測試中最基礎且關鍵的一步&#xff0c;它直接影響后續漏洞發現和利用的成功率。本文將系統介紹信息收集的常用方法、工具和技巧&#xff0c;幫助你在實戰中高效定位目標弱點。 一、搜索引擎利用 1. Google Hacking 通過Google搜索語法快速定位敏感信息、后臺地…

C++——類和對象1

1.類的定義1.1 類定義格式class為定義類的關鍵字&#xff0c;Stack為類的名字&#xff0c;{ }中的內容是類的主題為了&#xff0c;注意類定義結束時后面的分號不能省略。類體中的內容稱為類的成員&#xff1a;類中的變量稱為類的屬性或成員變量&#xff1b;類中的函數稱為類的方…

動手學Agent:Agent設計模式——構建有效Agent的7種模型

Agent本身的定義也不是絕對的&#xff0c;從LLM到最高等級的Agent&#xff0c;中間是有大量灰度地帶的&#xff0c;在Anthropic看來&#xff0c;Agent可以以多種方式定義&#xff0c;有些人將完全自主系統定義為Agent&#xff0c;而另一些團隊則將預定義的工作流程定義為Agent。…

Windows 下 .venv 激活腳本深度定制:同時注入 PyTorch 調試日志與國內網絡加速通道——從“能跑”到“好調”的完整工程化方案

Windows 下 .venv 激活腳本深度定制&#xff1a;同時注入 PyTorch 調試日志與國內網絡加速通道 ——從“能跑”到“好調”的完整工程化方案 一、為什么非得改激活腳本&#xff1f; 重復勞動最耗時 每次打開終端都要敲四五行 set/export&#xff0c;人腦就是不可靠的剪貼板。 環…

[BX]和loop指令,debug和masm匯編編譯器對指令的不同處理,循環,大小寄存器的包含關系,操作數據長度與寄存器的關系,段前綴

[bx]是什么[bx]這個表達方式和[0]很像&#xff0c;他們倆的功能也很像。之前就提到了&#xff0c;[0]表示一個內存單元&#xff0c;他的偏移地址是0。從這邊我們可以引出內存單元的定義&#xff1a;要有內存單元的地址&#xff0c;要有內存單元的長度&#xff08;類型&#xff…

域格YM310 X09移芯CAT1模組HTTPS連接服務器

HTTPS連接服務器 本文檔介紹了HTTPS連接服務器的大致流程&#xff0c;測試服務器為httpbin.org。 HTTPS連接服務器流程 創建證書文件 創建一個文件 ATFSCREATE<filename>參數&#xff1a;<filename> 文件名 寫入CA證書 ATFSWRITE<filename>,<mode&…

【ManiSkill】常見envs學習筆記

1. StackCube-v1 用于模擬機器人在桌面場景中將紅色立方體&#xff08;cubeA&#xff09;堆疊到綠色立方體&#xff08;cubeB&#xff09;上的操作。該任務強調精確抓取、放置和穩定性控制。成功條件包括紅色立方體穩定堆疊在綠色立方體上且不被機器人抓取。 參數 (Arguments…

Java 網絡編程全解析

前言&#xff1a;網絡編程的意義與價值 前言&#xff1a;網絡編程的意義與價值 在當今互聯網時代&#xff0c;網絡編程是軟件開發的核心技能之一。無論是桌面應用、移動應用還是企業級系統&#xff0c;幾乎都需要與網絡交互。Java 作為一門跨平臺的編程語言&#xff0c;提供了完…