1

最近在项目中需要用到一些属性框, 因为整个程序是用qt写的, 所以在aol.com(为啥不是google, 你懂的)一番后, 锁定了 qt-solutions 这个开源组件.
本以为一切都很顺利, 但还是发生了一些问题.

因为我只想用其中的QtPropertyBrowser这个组件, 所以就只把这部分的源码添加到了项目中, 但一编译就是一堆的错误:

...........
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtRectPropertyManager::staticMetaObject" (?staticMetaObject@QtRectPropertyManager@@2UQMetaObject@@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtRectFPropertyManager::staticMetaObject" (?staticMetaObject@QtRectFPropertyManager@@2UQMetaObject@@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtColorPropertyManager::staticMetaObject" (?staticMetaObject@QtColorPropertyManager@@2UQMetaObject@@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtSizePolicyPropertyManager::staticMetaObject" (?staticMetaObject@QtSizePolicyPropertyManager@@2UQMetaObject@@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtFontPropertyManager::staticMetaObject" (?staticMetaObject@QtFontPropertyManager@@2UQMetaObject@@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtCursorPropertyManager::staticMetaObject" (?staticMetaObject@QtCursorPropertyManager@@2UQMetaObject@@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtFlagPropertyManager::staticMetaObject" (?staticMetaObject@QtFlagPropertyManager@@2UQMetaObject@@B)
1>D:\Other\proj\earthmaker\Win32\Debug\EarthMaker.exe : fatal error LNK1120: 161 个无法解析的外部命令

看着应该是很简单的链接错误, 但因为我是把源码直接添加到项目中的, 而上面这个提示一般都是在引入三方库时才会出现的, 所以依然是到aol.com上搜索.

所有的搜索结果总结一下主要是下面几个原因导致的:

  1. 没找到你要链接的库 (这种很简单, 指定一下库的路径, 一般都OK)
  2. 没生成或没找到moc_*.cpp文件 (也比较简单, 在cpp的末尾添加上 #include "moc_xxx.cpp", 你别说 qtpropertybrowser 这个库就是这么干的
  3. 文件是unicode的, 需要随便修改一下, 再保存就ok了

遗憾的是, 以上几种我试过之后都没解决我的问题, 在困扰了我几天之后, 不经意的瞎点中发现了这个:
图片描述
而一般cpp文件的常规应该是这样:
图片描述

所以果断把qtpropertybrowser中所有的cpp的属性页都修改成 "C/C++编译器", 编译, 通过了!

visual studio和所有windows家的东西都是这样, 总是在时不时的给你来点小惊喜.......我快够了...


chaoswong
48 声望2 粉丝