QT编译qtdesigner

最近QT-designer不知道为啥所有电脑上的qt-designer都崩溃,没办法只能调试源代码,于是在qt4.7.4的源代码tools下,打开designer.pro,将其加载为QT的VS项目,编译designer发现报好多问题,简单的问题我就不多说了,几个比较简单的问题有:

1.找不到lib_pch.h,找不到lib_pch.cpp,配置C/C++的include即可

2.找不到qdesigner_pch.h,解决方法上同

3.moc_iconselector_p.cpp文件编译的时候找不到 IconSelectorPrivate,也就是d_func()->slotStateActivated()等等都找不到声明

大家都知道C++编译的时候,肯定要找到类型的声明部分,但是要编译moc_iconselector_p.cpp那就要增加声明啊,但是大家想想

QT使用的都是Impl技术,也就是私有化内部实现,咱们是不可能加iconselector.cpp的,这样就没法编译了。(相互依赖啊)。


解决方案:

1.QT对特定的关键字处理不一样,对于头文件中Q_OBJECT的会采用moc机制来生成QMetaObject对象

2.对于Q_PRIVATE_SLOT() 其实并不是起到宏定义的作用,只是预留,留给moc来进行处理,对于Q_PRIVATE_SLOTS这种特殊的情况其生成的moc文件不能单独参与编译

  (如果要编译,也就意味着需要include 私有类的定义)

3.正确的做法是如果遇到Q_PRIVATE_SLOT,需要在该实现文件(cpp文件中)最后加入moc_xxxx.cpp文件。由原始的cpp文件引导moc文件的编译,这样就形成单向编译了。

4.而qtdesigner中报的问题的根本原因是该moc文件参与编译了。所以要想根本的解决这个问题需要编辑vcprojx文件。将moc从编译中移除,移除方法如下:

找到该文件的编译选项:

<ClCompile Include="Debug\moc_iconselector_p.cpp">

<ExcludedFromBuild Condition="$(Configuration)|$(Platform)'=='Release|Win32'">true<ExcludedFromBuild>

<ClCompile>

很明显,右pro导入的vc项目文件配置有BUG,将部分文件的debug和release的移除依赖弄反了

<ClCompile Include="Debug\moc_iconselector_p.cpp">

<ExcludedFromBuild Condition="$(Configuration)|$(Platform)'=='Debug|Win32'">true<ExcludedFromBuild>

<ClCompile>


其他文件出现的这种问题也需要采用相同的方法来解决,如果debug编译不过去,就将有问题的文件从debug中移除,

release中有问题的文件从release中移除即可。【注意:每个文件针对每个配置选项都有一套,均需要修改正确】

5.在此编译QTDesigner成功通过

6.designer也OK了,嘿嘿

7.另外通过调试 我也知道了为什么我的qtdesigner一直崩溃的问题了,不止第三方DLL的问题,而是有个设计的配置文件有问题,文件位置在

c:\users\用户名\.designer 【注意designer前面的点号,默认是隐藏的】里面有个gradients.xml,我发现这个文件有700多M。由于这个文件

加载错误导致了qtdesigner的崩溃,将该文件删除即可,QT的资源里有默认的配置文件。










你可能感兴趣的:(qtdesigner编译)