Qt5中创建及使用自定义插件遇到的一些问题

 今天,《C++ GUI Programming with Qt 4》看到了第五章自定义IconEditorPlugin的地方。动手尝试过程中,遇到一些问题,记录一下,借前辈之成果,示于后来者。

        开发环境:Win7 64 bit + Qt 5.1.0。

       由于书上是在Qt 4.x讲的,而小伙伴们使用Qt 5.1.0有一段时间了。Qt 5 又不是完全兼容Qt 4.x(至于Qt 4.x -> Qt 5 需要注意的问题,参见:The Transition from Qt 4.x to Qt 5 或者Porting from Qt 4 to Qt 5),所以这次动手尝试颇为不顺,主要遇到两个问题:

(1) Qt 5 中开发插件的方法和Qt 4.x有所不同

        详情参考这里:Qt5:自定义窗口部件或这里Q_EXPORT_PLUGIN_2 breaks source compat 或者 How to Create Qt Plugins

        开发环境是Qt 5.x,而书籍是以Qt 4.x讲的,的确让刚接触Qt的菜鸟(如我)不知所措。有点参考价值的随书代码,也可能不再适用。幸运的是,已经有小伙伴把这本书的随书代码从Qt 4.x移植到Qt 5中来了:Porting source code of the book C++ GUI Programming with Qt 4 from Qt4 to Qt5 。

        成功解决Qt版本差异带来的问题后,兴冲冲地编译、链接、生成dll文件,但是这个dll该怎么用呢?怎么能够在Qt Designer中像使用内置组件一样使用这个自定义组件呢?这就是下一个问题了。

(2) 在Windows中QtCreator无法识别自定义插件


        生成dll后,我把它放置到D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer下,打开D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\bin\designer.exe,在左侧的组件栏里找到了IconEditor。拨弄个窗体,拖一个IconEditor,完美!

        接下来,为了了解这个IconEditor和上面自定义的IconEditor类是怎么协同工作的,我打开QtCreator,建立了一个完整的应用程序。这个程序带一个对话框,在QtCreator中打开ui文件,可是发现左侧组件栏里没有我要的IconEditor组件。

        单独打开QtDesigner可以看到,但是在QtCreator中集成的designer界面中却没有IconEditor,怎么回事呢?

        我想,会不会是QtCreator查找插件的路径和QtDesigner不一样,于是便在Qt安装目录中闲逛。别说,还真让我发现了一个地方:D:\Qt\Qt5.1.0\Tools\QtCreator\bin\plugins\designer。在这个文件夹下,已经有几个插件,和D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer目录下的一模一样。难道我创建的自定义插件也要往这里复制一份吗?

        说干就干,复制完后,重启QtCreator,打开UI设计界面。晕,还没有。难道是QtCreator加载自定义插件需要额外的操作?网上搜索, 找到了QtCreator检测插件是否加载成功的方法:

        在QtCreator中打开项目的界面文件(*.ui),此时QtCreator允许你使用集成的QtDesigner来编辑这个ui文件,然后打开菜单项“工具->界面编辑器->About Qt Designer plugins...”即可查看哪些插件加载成功了,哪些未加载成功(在单独运行的QtDesigner中,打开“帮助->关于插件”菜单也可查看插件加载成功与否)。

        我发现在QtCreator中,自己定义的IconEditor未加载成功(在单独打开的QtDesigner中,加载没有问题):

        这张图片表示QtCreator找到了插件,但是未成功加载(注意:要让QtCreator找到自定义的插件,必须把它复制到Qt\Qt5.1.0\Tools\QtCreator\bin\plugins\designer目录下,在Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer目录下的只能让单独运行的QtDesigner加载)。

        找到一条信息:QTCreator's integrated form editor won't load custom widget plugins (Designer does) 。虽然这个问题对我帮助不大,但鉴于这个问题描述的现象和自己的问题极为贴近,便记录下来。继续搜索!

        (此处省略9999字,不过搜索真相的过程是”艰辛“的……)

        最后找到的几篇完美解决问题:

        在QtCreator中使用自定义控件及在vs2010中集成

        QT (win32) Cannot use custom widgets build by itself

        QT自定义控件整合

后记:

        其实本来想写的比这要长得多(想把参考过的内容整合总结一下)。无奈本性懒散,又加上眼睛不适,便省却遣词造句、谋篇布局之繁琐,仅仅把比较有价值的参考链接列在文中,靠诸君自己点击阅读了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值