赞
踩
此教程供个人学习与经验分享,如有不足或错误之处也麻烦指正。如遇到问题讨论或指正错误,请邮件:cheng425863@icloud.com,长期有效。
理论上教程兼容所有版本,配置个人版本需要注意Cmake,Vs,VTK等需要版本兼容。另外注意:VTK9.0版本后不需要编译QT控件。
在这里提供教程里涉及的所有安装包:百度云地址,密码:0412。
本教程资源如下:
1.打开所提供的QT安装包,如下界面:
QT的安装需要登录自己的QT账号,如果没有的话可以去官网或者界面Sign up去注册,填入账号密码即可下一步。(据说离线状态下会跳过这一步,没有试过。)
注:同意协议,欢迎安装等界面自行操作!
2.QT安装路径,路径不能含有中文及空格符,默认推荐安装C盘根目录。(这个一定要注意,中文及空格会导致后续操作异常,推荐C根目录是因为Cmake默认扫描路径是C盘,后续管理也方便)。
3.QT组件安装选择。这里面根据自己的工作需求进行选择,纯小白建议全部安装或按照我下面的选择进行安装。
4.后面就是同意协议,确认安装什么的,一直点击“Next”就好,不做赘述,至此,QT安装完成。
5.环境检验:QT不同的版本略微有差别,有的版本会在安装过程中询问你是否添加路径到环境变量,有的则不会询问自动添加。本教程本部不会询问,QT安装完后需自己在:此电脑——属性——关于——高级系统设置——环境变量中查看是否存添加了QT环境路径,否则自行添加,如下:
Github上提供了Allnoneinstaller。
链接
我电脑上VS版本是2015,用的是:PCL-1.8.1-AllInOne-msvc2015-win64.exe
安装过程简单,一直下一步即可。
有两个地方需要再次提醒:
1.在以下界面,请添加PCL到系统路径。
2.安装路径确保无空格符号,下图是个错误示例(含有空格),建议安装到C盘根目录。
3.PCL安装快结束时,会要求你安装OpenGL2,为了便于管理,最好把OpenNI2安装到PCL安装目录的 3rdParty 文件夹下。
等待安装完成即可,至此,PCL安装完成。
Cmake安装比较简单,一直下一步即可,同时也要注意,安装路径不能含有中文及空格,推荐安装在C盘根目录下。
在下面这个界面中,推荐选项如下。
这个部分是最难最复杂的,基本上都是卡在了这里,请务必仔细。
PCL自带VTK是不完整的,这里我们需要下载VTK源码进行重新编译使其支持QT并覆盖PCL原生VTK。
一.编译前有几项前提工作;
1.解压所提供的VTK,把VTK解压至PCL安装文件路径下3rdParty文件夹,获得解压文件vtk-v8.0.0,打开解压的文件夹vtk-v8.0.0并创建build空文件夹。
2.电脑系统环境配置:
于20230710对此教程做出了优化,此处不要在意截图路径于本教程内不对应问题。重点是需要将哪些路径配置到环境变量。
3.删除PCL自带VTK路径下所有文件
二.编译
1.打开界面,如下图。
Where is the source code:填入解压后vtk-v8.0.0路径,
例:C:/PCL1.8.1/3rdParty/vtk-v8.0.0
Where to build the binaries:填入vtk-v8.0.0\build路径,
例:C:/PCL1.8.1/3rdParty/vtk-v8.0.0/build
2.点击Configure,会弹出以下界面,选择对应的VS版本与平台版本即可,例:VS2015,X64,点击完成。
3.Configure完成后如下界面,勾选Grouped,Advanced便于我们查看,这里可以提前执行下第9步,并检查下QT相关路径确保无误。
4.第一次Configure后,要在VTK下勾选”VTK_ALL_NEW_OBJECT_FACTORY”与”VTK_DEBUG_LEAKS”.
5.BUILD下取消勾选”BUILD_TESTING”
6.CMAKE下CMAKE_INSTALL_PREFIX更改为PCL自带的VTK路径
7.VTK下勾选VTK_Group_QT,”VTK_RENDERING_BACKEND”设置为OpenGl。
8.点击Add Entry,添加CMAKE_DEBUG_POSTFIX,Value设置为“-gd”(用来区分Debug与Release版本)。
9.特别注意,QT版本与所安装版本保持一致,在这里我们的版本是5,否则报错。
10.依次点击,Configure,无异常后点击Generate。
11.Generate完成后,打开我们创建的build文件夹,打开VTK.sln文件。这里我们需要在Debug模式下对ALL_BUILD和INSTALL右键点击生成,在Release模式下再对ALL_BUILD和INSTALL右键点击生成,一共需要生成四次,如途中报错,请重装相关软件重新执行上述流程。
12.添加DLL与Lib至QT:
找到下面两个文件:
C:\PCL1.8.1\3rdParty\VTK\plugins\designer\QVTKWidgetPlugin.dll
C:\PCL1.8.1\3rdParty\vtk-v8.0.0\build\lib\Release\QVTKWidgetPlugin.lib
(注意辨别,这是我的PCL安装路径)
粘贴至:
C:\Qt\Qt5.12.12\5.12.12\msvc2015_64\plugins\designer与
C:\Qt\Qt5.12.12\Tools\QtCreator\bin\plugins\designer路径下
(注意辨别,这是我的QT安装路径)
13.验证。
打开QT Creator,控件栏下存在以下控件,则代表编译OK。
基于以上,已完成软件安装,VTK编译等操作,接下来跑个Demo来显示经典的斯坦福兔子。
C++Demo:
1.在VS中创建C++空项目。
2.打开项目属性,进入属性页。
3.添加环境路径,调试—环境—编辑,粘贴以下环境路径:
PATH=KaTeX parse error: Undefined control sequence: \bin at position 11: (PCL_ROOT)\̲b̲i̲n̲;(PCL_ROOT)\3rdParty\FLANN\bin;$(PCL_ROOT)\3rdParty\VTK\bin;
KaTeX parse error: Undefined control sequence: \Qhull at position 11: (PCL_ROOT)\̲Q̲h̲u̲l̲l̲\bin;(PCL_ROOT)\3rdParty\OpenNI2\Tools;$(PATH)
4.C/C++—常规—SDL检查,更改为”否”。
5.C/C++—代码生成—运行库设定为:”多线程调试DLL(/MDd)”。
6.VC++目录—包含目录设定如下:
7.VC++目录—库目录设定如下:
8.C/C++—预处理器——预处理定义如下:
_CRT_SECURE_NO_WARNINGS
BOOST_ALL_NO_LIB
BOOST_USE_WINDOWS_H
NOMINMAX
_SCL_SECURE_NO_WARNINGS
_SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING
9.链接器—常规—附加库目录:
10.链接器—输入—附加依赖项:
敲黑板了:
这一块配置又臭又长,这里提供一个快捷方法。
Win+R输入cmd调用window控制台
我的PCL装在D盘,则输入【D:】回车,切换到D盘,将lib文件夹路径复制,【cd 文件路径】回车,进入对应文件夹控制
以我的路径示例:
1.输入 D: 按下回车进入D盘
2.输入cd D:\VTK-VC2019\install\lib 按下回车进入lib目录
3.输入 DIR .lib/B>LIST.TXT 然后回车,lib文件夹内就会出现一个LIST.TXT的文件。
这里分Debug与Release两种情况。
Debug:
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_debug.lib
pcl_io_ply_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_ml_debug.lib
pcl_octree_debug.lib
pcl_outofcore_debug.lib
pcl_people_debug.lib
pcl_recognition_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_stereo_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
flann-gd.lib
libboost_atomic-vc140-mt-gd-1_64.lib
libboost_chrono-vc140-mt-gd-1_64.lib
libboost_container-vc140-mt-gd-1_64.lib
libboost_context-vc140-mt-gd-1_64.lib
libboost_coroutine-vc140-mt-gd-1_64.lib
libboost_date_time-vc140-mt-gd-1_64.lib
libboost_exception-vc140-mt-gd-1_64.lib
libboost_filesystem-vc140-mt-gd-1_64.lib
libboost_graph-vc140-mt-gd-1_64.lib
libboost_iostreams-vc140-mt-gd-1_64.lib
libboost_locale-vc140-mt-gd-1_64.lib
libboost_log-vc140-mt-gd-1_64.lib
libboost_log_setup-vc140-mt-gd-1_64.lib
libboost_math_c99-vc140-mt-gd-1_64.lib
libboost_math_c99f-vc140-mt-gd-1_64.lib
libboost_math_c99l-vc140-mt-gd-1_64.lib
libboost_math_tr1-vc140-mt-gd-1_64.lib
libboost_math_tr1f-vc140-mt-gd-1_64.lib
libboost_math_tr1l-vc140-mt-gd-1_64.lib
libboost_mpi-vc140-mt-gd-1_64.lib
libboost_prg_exec_monitor-vc140-mt-gd-1_64.lib
libboost_program_options-vc140-mt-gd-1_64.lib
libboost_random-vc140-mt-gd-1_64.lib
libboost_regex-vc140-mt-gd-1_64.lib
libboost_serialization-vc140-mt-gd-1_64.lib
libboost_signals-vc140-mt-gd-1_64.lib
libboost_system-vc140-mt-gd-1_64.lib
libboost_test_exec_monitor-vc140-mt-gd-1_64.lib
libboost_thread-vc140-mt-gd-1_64.lib
libboost_timer-vc140-mt-gd-1_64.lib
libboost_unit_test_framework-vc140-mt-gd-1_64.lib
libboost_wave-vc140-mt-gd-1_64.lib
libboost_wserialization-vc140-mt-gd-1_64.lib
qhull_d.lib
qhull_p_d.lib
qhull_r_d.lib
qhullcpp_d.lib
qhullstatic_d.lib
qhullstatic_r_d.lib
vtkalglib-8.0-gd.lib
vtkChartsCore-8.0-gd.lib
vtkCommonColor-8.0-gd.lib
vtkCommonComputationalGeometry-8.0-gd.lib
vtkCommonCore-8.0-gd.lib
vtkCommonDataModel-8.0-gd.lib
vtkCommonExecutionModel-8.0-gd.lib
vtkCommonMath-8.0-gd.lib
vtkCommonMisc-8.0-gd.lib
vtkCommonSystem-8.0-gd.lib
vtkCommonTransforms-8.0-gd.lib
vtkDICOMParser-8.0-gd.lib
vtkDomainsChemistry-8.0-gd.lib
vtkexoIIc-8.0-gd.lib
vtkexpat-8.0-gd.lib
vtkFiltersAMR-8.0-gd.lib
vtkFiltersCore-8.0-gd.lib
vtkFiltersExtraction-8.0-gd.lib
vtkFiltersFlowPaths-8.0-gd.lib
vtkFiltersGeneral-8.0-gd.lib
vtkFiltersGeneric-8.0-gd.lib
vtkFiltersGeometry-8.0-gd.lib
vtkFiltersHybrid-8.0-gd.lib
vtkFiltersHyperTree-8.0-gd.lib
vtkFiltersImaging-8.0-gd.lib
vtkFiltersModeling-8.0-gd.lib
vtkFiltersParallel-8.0-gd.lib
vtkFiltersParallelImaging-8.0-gd.lib
vtkFiltersProgrammable-8.0-gd.lib
vtkFiltersSelection-8.0-gd.lib
vtkFiltersSMP-8.0-gd.lib
vtkFiltersSources-8.0-gd.lib
vtkFiltersStatistics-8.0-gd.lib
vtkFiltersTexture-8.0-gd.lib
vtkFiltersVerdict-8.0-gd.lib
vtkfreetype-8.0-gd.lib
vtkGeovisCore-8.0-gd.lib
vtkhdf5-8.0-gd.lib
vtkhdf5_hl-8.0-gd.lib
vtkImagingColor-8.0-gd.lib
vtkImagingCore-8.0-gd.lib
vtkImagingFourier-8.0-gd.lib
vtkImagingGeneral-8.0-gd.lib
vtkImagingHybrid-8.0-gd.lib
vtkImagingMath-8.0-gd.lib
vtkImagingMorphological-8.0-gd.lib
vtkImagingSources-8.0-gd.lib
vtkImagingStatistics-8.0-gd.lib
vtkImagingStencil-8.0-gd.lib
vtkInfovisCore-8.0-gd.lib
vtkInfovisLayout-8.0-gd.lib
vtkInteractionImage-8.0-gd.lib
vtkInteractionStyle-8.0-gd.lib
vtkInteractionWidgets-8.0-gd.lib
vtkIOAMR-8.0-gd.lib
vtkIOCore-8.0-gd.lib
vtkIOEnSight-8.0-gd.lib
vtkIOExodus-8.0-gd.lib
vtkIOExport-8.0-gd.lib
vtkIOGeometry-8.0-gd.lib
vtkIOImage-8.0-gd.lib
vtkIOImport-8.0-gd.lib
vtkIOInfovis-8.0-gd.lib
vtkIOLegacy-8.0-gd.lib
vtkIOLSDyna-8.0-gd.lib
vtkIOMINC-8.0-gd.lib
vtkIOMovie-8.0-gd.lib
vtkIONetCDF-8.0-gd.lib
vtkIOParallel-8.0-gd.lib
vtkIOPLY-8.0-gd.lib
vtkIOSQL-8.0-gd.lib
vtkIOVideo-8.0-gd.lib
vtkIOXML-8.0-gd.lib
vtkIOXMLParser-8.0-gd.lib
vtkjpeg-8.0-gd.lib
vtkjsoncpp-8.0-gd.lib
vtklibxml2-8.0-gd.lib
vtkmetaio-8.0-gd.lib
vtkNetCDF-8.0-gd.lib
vtknetcdf_c++-gd.lib
vtkoggtheora-8.0-gd.lib
vtkParallelCore-8.0-gd.lib
vtkpng-8.0-gd.lib
vtkproj4-8.0-gd.lib
vtkRenderingAnnotation-8.0-gd.lib
vtkRenderingContext2D-8.0-gd.lib
vtkRenderingCore-8.0-gd.lib
vtkRenderingFreeType-8.0-gd.lib
vtkRenderingImage-8.0-gd.lib
vtkRenderingLabel-8.0-gd.lib
vtkRenderingLOD-8.0-gd.lib
vtkRenderingVolume-8.0-gd.lib
vtksqlite-8.0-gd.lib
vtksys-8.0-gd.lib
vtktiff-8.0-gd.lib
vtkverdict-8.0-gd.lib
vtkViewsContext2D-8.0-gd.lib
vtkViewsCore-8.0-gd.lib
vtkViewsInfovis-8.0-gd.lib
vtkzlib-8.0-gd.lib
OpenNI2.lib
Release:
pcl_common_release.lib
pcl_features_release.lib
pcl_filters_release.lib
pcl_io_release.lib
pcl_io_ply_release.lib
pcl_kdtree_release.lib
pcl_keypoints_release.lib
pcl_ml_release.lib
pcl_octree_release.lib
pcl_outofcore_release.lib
pcl_people_release.lib
pcl_recognition_release.lib
pcl_registration_release.lib
pcl_sample_consensus_release.lib
pcl_search_release.lib
pcl_segmentation_release.lib
pcl_stereo_release.lib
pcl_surface_release.lib
pcl_tracking_release.lib
pcl_visualization_release.lib
libboost_atomic-vc140-mt-1_64.lib
libboost_bzip2-vc140-mt-1_64.lib
libboost_chrono-vc140-mt-1_64.lib
libboost_container-vc140-mt-1_64.lib
libboost_context-vc140-mt-1_64.lib
libboost_contract-vc140-mt-1_64.lib
libboost_coroutine-vc140-mt-1_64.lib
libboost_date_time-vc140-mt-1_64.lib
libboost_exception-vc140-mt-1_64.lib
libboost_fiber-vc140-mt-1_64.lib
libboost_filesystem-vc140-mt-1_64.lib
libboost_graph-vc140-mt-1_64.lib
libboost_graph_parallel-vc140-mt-1_64.lib
libboost_iostreams-vc140-mt-1_64.lib
libboost_json-vc140-mt-1_64.lib
libboost_locale-vc140-mt-1_64.lib
libboost_log-vc140-mt-1_64.lib
libboost_log_setup-vc140-mt-1_64.lib
libboost_math_c99-vc140-mt-1_64.lib
libboost_math_c99f-vc140-mt-1_64.lib
libboost_math_c99l-vc140-mt-1_64.lib
libboost_math_tr1-vc140-mt-1_64.lib
libboost_math_tr1f-vc140-mt-1_64.lib
libboost_math_tr1l-vc140-mt-1_64.lib
libboost_mpi-vc140-mt-1_64.lib
libboost_nowide-vc140-mt-1_64.lib
libboost_numpy38-vc140-mt-1_64.lib
libboost_prg_exec_monitor-vc140-mt-1_64.lib
libboost_program_options-vc140-mt-1_64.lib
libboost_python38-vc140-mt-1_64.lib
libboost_random-vc140-mt-1_64.lib
libboost_regex-vc140-mt-1_64.lib
libboost_serialization-vc140-mt-1_64.lib
libboost_stacktrace_noop-vc140-mt-1_64.lib
libboost_stacktrace_windbg-vc140-mt-1_64.lib
libboost_stacktrace_windbg_cached-vc140-mt-1_64.lib
libboost_system-vc140-mt-1_64.lib
libboost_test_exec_monitor-vc140-mt-1_64.lib
libboost_thread-vc140-mt-1_64.lib
libboost_timer-vc140-mt-1_64.lib
libboost_type_erasure-vc140-mt-1_64.lib
libboost_unit_test_framework-vc140-mt-1_64.lib
libboost_wave-vc140-mt-1_64.lib
libboost_wserialization-vc140-mt-1_64.lib
libboost_zlib-vc140-mt-1_64.lib
flann.lib
flann_cpp.lib
flann_cpp_s.lib
flann_s.lib
qhullcpp.lib
qhullstatic.lib
qhullstatic_r.lib
qhull_r.lib
vtkChartsCore-8.0.lib
vtkCommonColor-8.0.lib
vtkCommonComputationalGeometry-8.0.lib
vtkCommonCore-8.0.lib
vtkCommonDataModel-8.0.lib
vtkCommonExecutionModel-8.0.lib
vtkCommonMath-8.0.lib
vtkCommonMisc-8.0.lib
vtkCommonSystem-8.0.lib
vtkCommonTransforms-8.0.lib
vtkDICOMParser-8.0.lib
vtkDomainsChemistry-8.0.lib
vtkDomainsChemistryOpenGL2-8.0.lib
vtkdoubleconversion-8.0.lib
vtkexodusII-8.0.lib
vtkexpat-8.0.lib
vtkFiltersAMR-8.0.lib
vtkFiltersCore-8.0.lib
vtkFiltersExtraction-8.0.lib
vtkFiltersFlowPaths-8.0.lib
vtkFiltersGeneral-8.0.lib
vtkFiltersGeneric-8.0.lib
vtkFiltersGeometry-8.0.lib
vtkFiltersHybrid-8.0.lib
vtkFiltersHyperTree-8.0.lib
vtkFiltersImaging-8.0.lib
vtkFiltersModeling-8.0.lib
vtkFiltersParallel-8.0.lib
vtkFiltersParallelImaging-8.0.lib
vtkFiltersPoints-8.0.lib
vtkFiltersProgrammable-8.0.lib
vtkFiltersSelection-8.0.lib
vtkFiltersSMP-8.0.lib
vtkFiltersSources-8.0.lib
vtkFiltersStatistics-8.0.lib
vtkFiltersTexture-8.0.lib
vtkFiltersTopology-8.0.lib
vtkFiltersVerdict-8.0.lib
vtkfreetype-8.0.lib
vtkGeovisCore-8.0.lib
vtkgl2ps-8.0.lib
vtkglew-8.0.lib
vtkhdf5-8.0.lib
vtkhdf5_hl-8.0.lib
vtkImagingColor-8.0.lib
vtkImagingCore-8.0.lib
vtkImagingFourier-8.0.lib
vtkImagingGeneral-8.0.lib
vtkImagingHybrid-8.0.lib
vtkImagingMath-8.0.lib
vtkImagingMorphological-8.0.lib
vtkImagingSources-8.0.lib
vtkImagingStatistics-8.0.lib
vtkImagingStencil-8.0.lib
vtkInfovisCore-8.0.lib
vtkInfovisLayout-8.0.lib
vtkInteractionImage-8.0.lib
vtkInteractionStyle-8.0.lib
vtkInteractionWidgets-8.0.lib
vtkIOAMR-8.0.lib
vtkIOAsynchronous-8.0.lib
vtkIOCityGML-8.0.lib
vtkIOCore-8.0.lib
vtkIOEnSight-8.0.lib
vtkIOExodus-8.0.lib
vtkIOExport-8.0.lib
vtkIOExportGL2PS-8.0.lib
vtkIOExportPDF-8.0.lib
vtkIOGeometry-8.0.lib
vtkIOImage-8.0.lib
vtkIOImport-8.0.lib
vtkIOInfovis-8.0.lib
vtkIOLegacy-8.0.lib
vtkIOLSDyna-8.0.lib
vtkIOMINC-8.0.lib
vtkIOMotionFX-8.0.lib
vtkIOMovie-8.0.lib
vtkIONetCDF-8.0.lib
vtkIOOggTheora-8.0.lib
vtkIOParallel-8.0.lib
vtkIOParallelXML-8.0.lib
vtkIOPLY-8.0.lib
vtkIOSegY-8.0.lib
vtkIOSQL-8.0.lib
vtkIOTecplotTable-8.0.lib
vtkIOVeraOut-8.0.lib
vtkIOVideo-8.0.lib
vtkIOXML-8.0.lib
vtkIOXMLParser-8.0.lib
vtkjpeg-8.0.lib
vtkjsoncpp-8.0.lib
vtklibharu-8.0.lib
vtklibproj-8.0.lib
vtklibxml2-8.0.lib
vtkloguru-8.0.lib
vtklz4-8.0.lib
vtklzma-8.0.lib
vtkmetaio-8.0.lib
vtknetcdf-8.0.lib
vtkogg-8.0.lib
vtkParallelCore-8.0.lib
vtkParallelDIY-8.0.lib
vtkpng-8.0.lib
vtkpugixml-8.0.lib
vtkRenderingAnnotation-8.0.lib
vtkRenderingContext2D-8.0.lib
vtkRenderingContextOpenGL2-8.0.lib
vtkRenderingCore-8.0.lib
vtkRenderingFreeType-8.0.lib
vtkRenderingGL2PSOpenGL2-8.0.lib
vtkRenderingImage-8.0.lib
vtkRenderingLabel-8.0.lib
vtkRenderingLOD-8.0.lib
vtkRenderingOpenGL2-8.0.lib
vtkRenderingSceneGraph-8.0.lib
vtkRenderingUI-8.0.lib
vtkRenderingVolume-8.0.lib
vtkRenderingVolumeOpenGL2-8.0.lib
vtkRenderingVtkJS-8.0.lib
vtksqlite-8.0.lib
vtksys-8.0.lib
vtkTestingRendering-8.0.lib
vtktheora-8.0.lib
vtktiff-8.0.lib
vtkverdict-8.0.lib
vtkViewsContext2D-8.0.lib
vtkViewsCore-8.0.lib
vtkViewsInfovis-8.0.lib
vtkWrappingTools-8.0.lib
vtkzlib-8.0.lib
以上,VS项目配置完成。
Demo代码:
#include "stdafx.h"
#include<iostream>
#include<pcl/io/pcd_io.h>
#include<pcl/visualization/cloud_viewer.h>
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
viewer.setBackgroundColor(0.5, 0.9, 0.5); //设置背景颜色
}
int main() {
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
char strfilepath[256] = "rabbit.pcd";//这里填点云路径
pcl::io::loadPCDFile(strfilepath, *cloud);
pcl::visualization::CloudViewer viewer("Cloud Viewer"); //创建viewer对象
viewer.showCloud(cloud);
viewer.runOnVisualizationThreadOnce(viewerOneOff);
pcl::io::savePCDFile("Savepcd.pcd", *cloud);
system("pause");
return 0;
}
点击运行!兔子就出来了,至此PCL基于C++与QT的环境配置结束。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。