已解决:字符编码问题。用记事本将文件编码改为unicode即可
制作制图功能时,我决定直接原样照抄copy源码,将QgsComposer类改为fComposer,调试一下删除不用的功能。再在主界面的类中把源码主界面的QgsApp类中涉及到composer的功能全部复制过来。
稍作修改后,惊奇地发现,新建和删除composer的两个函数死活通不过编译,而且报的错非常奇怪:
error: C2039: “createNewComposer”: 不是“MainWindow”的成员
error: C2039: “deleteComposer”: 不是“MainWindow”的成员
/** Creates a new composer and returns a pointer to it*/ QgsComposer* createNewComposer( QString title = QString() ); /** Deletes a composer and removes entry from Set*/ void deleteComposer( QgsComposer *c )
测试了大半天,偶然发现,似乎是因为我把doxygen注释修改成中文造成的问题。
/** 创建一个新的composer并返回指针*/ fComposer* createNewComposer(QString title = QString()); /** 删除指定composer并从Set移除*/ void deleteComposer( fComposer *c );
把注释改为双斜杠或者改回英文就好了。不过我还是没有摸清bug的规律,因为这两个函数下面明明紧接着又是一个doxygen+中文注释的函数,从始至终却异常安静没有报错。事实上,当我为了写这个博客改回doxygen+中文注释试图重现bug时,deleteComposer函数却又不报错了!
总之以后慎用doxygen注释,老老实实用双斜杠好了。