• 7228阅读
  • 4回复

[提问]qt5自定义插件无法使用的问题 [复制链接]

上一主题 下一主题
离线zhh_soviet
 
只看楼主 倒序阅读 楼主  发表于: 2013-04-09
关键词: Qt5插件
最近在学习Qt5的时候遇到了这个要命的问题,求大家看看如何解决哈,我尽量描述得详细一些:
1、Qt来源:在http://qt-project.org/downloads上下载的Qt 5.0.1 for Windows32-bit (VS 2010, 481 MB) 和Visual Studio Add-in 1.2.0 for Qt5,安装好,用QtCreator和VS2010写普通的Qt程序没问题,写自定义插件时候出了问题;
2、在VS2010下新建Qt5 DesignerPlugin,名字叫MyPanel,生成了两个类MyPanel和MyPanelPlugin,Release下编译后生成MyPanel.dll和MyPanel.lib,将这两个文件拷贝到D:\Qt\Qt5.0.1\5.0.1\msvc2010\plugins\designer下;
3、在VS2010下新建Qt5 Application,名字叫TestApp,baseclass为QMainWindow,编译运行空项目,成功;
4、用Qt Designer打开TestApp.ui,从控件栏里面将MyPanel拖入,改名字为panel,保存;
5、编译运行TestApp,在ui_testapp.h中报告:无法打开包括文件:“mypanel.h”,以及一系列的无法打开Qt的源文件,将工程转换为QMake生成,Qt的各个源文件都可以打开了;
6、将mypanel.h文件copy到\TestApp\GeneratedFiles下,编译,报错:testapp.obj :error LNK2019: 无法解析的外部符号 "public: __thiscall MyPanel::MyPanel(classQWidget *)" (??0MyPanel@@QAE@PAVQWidget@@@Z),该符号在函数 "public: void__thiscall Ui_TestAppClass::setupUi(class QMainWindow *)"(?setupUi@Ui_TestAppClass@@QAEXPAVQMainWindow@@@Z) 中被引用;
7、将MyPanel.dll和MyPanel.lib拷贝到所有可能目录,并且在TestApp的属性中,链接器-输入-附加依赖项中,将MyPanel.lib加入,仍然报6中的错误

至此,完全一筹莫展了。
附加:因为用的是Qt5的VS插件,所以没有.pro文件可以修改,不过我也用Qt Creator试过,也无法通过。

这个插件问题,Qt4和Qt5的差别是很大的,之前用Qt Creator生成插件都编译不过,费了很大力气终于到这里了,还是无法前进。恳请各位高手指点一下下!
离线dbzhang800

只看该作者 1楼 发表于: 2013-04-09
从你的描述看,你的插件不存在任何问题。(成功生成插件,并且已被Qt Designer识别)

问题应该是,你误解了该插件的用途。(它只是designer的一个插件,对你的工程来说,有或是没有它,应该没有任何影响。)

题外:

正常流程(Qt4、Qt5):
1.  编写自己需要类,将这些类封装到一个动态库中。
2.  编写designer的插件,(该插件依赖于上面的动态库),使自己的类可以在designer中直接使用
3.  编写程序,通过designer设计界面,并使用自定义类 (依赖于上面的动态库)

其中:除非这些类经常需要在designer中使用,一般来说第二步都可以省掉
离线zhh_soviet
只看该作者 2楼 发表于: 2013-04-11
问题解决了,但是产生了新的疑问:
解决方法是:将MyPanel的构造函数加上__declspec(dllexport),在。
疑问是:从来写dll没有这样做的,所有的相关资料也没有这样写的,虽然可以对付过去了,但是更糊涂了。
离线uidab

只看该作者 3楼 发表于: 2013-04-11
回 2楼(zhh_soviet) 的帖子
__declspec这个在MSDN中有介绍。你可以问问VS用的比较多的人。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线daatyu

只看该作者 4楼 发表于: 2016-08-17
路过,看看
快速回复
限100 字节
 
上一个 下一个