标题:烦死了,各位大佬帮下忙,如何自定义控件并编译通过?
作者:lanmanck
日期:2020-06-17 19:46
内容:
网上找了一通,在csdn最多,但是都不好使啊,哎,就来这里问问各位大佬了,搞了2天还是没头绪,帮帮忙吧。。。。
1、安装 qt-opensource-windows-x86-5.14.1.exe (vc2017/32bit / 2.2GB) 到D盘
2、打开qt creator,new file or project ->Other project ->Qt custom designer widget(中文:QT4控件,我一度怀疑QT5不支持,妈的),然后一路Next,名称大小写注意
3、构建release版本(必须vs2017 32bit,不然搞死你),得到xxplugin.dll和xxplugin.lib,把dll拷贝到:
d:\Qt\Qt5.14.1\Tools\QtCreator\bin\plugins\designer\
注意,不用拷贝lib,网上有的文章比较扯淡?
4、关闭并再次打开creator,新建widget application,可以看到这个控件已经加载,把他拖到mainwindow上,点编译,尼玛,提示头文件找不到。
所以在widget application工程下建目录libs,拷贝上面的dll,lib,xx.h 3个文件到目录 libs下面,
改pro文件,加上
LIBS += $$PWD/libs/xxplugin.lib
INCLUDEPATH += $$PWD/libs
DEPENDPATH += $$PWD/libs
5、这下h和lib都没提示问题,但还是提示类的构造函数找不到,无法链接,我真的没辙了。。。。
折腾了2天,有说 插件实现类加上 QDESIGNER_WIDGET_EXPORT 的,这个倒可以编译通过,但是一运行就报错,到底咋回事咧???
#1 [dbzhang800 06-17 20:20]
designer 插件不是这么玩的。
1. 首先,定义的你的自定义Widget,源码 *.h*.cpp
编译后得到 .*h *.dll *.lib
你这样,你在QtCreator(designer 中直接提升即可)或者其他地方都可以用的。
2. 然后你想更近一步,不想使用designer中的提升。而是想像QPushButton一样直接拖拽
这时,你才需要写一个 .dll 插件。该插件依赖前面的 *.dll
这个插件对程序没有任何影响(只解决一个拖拽问题),拖拽后,你还是需要使用你第一步写的东西。
3. 你的程序,在没有插件的QtCeator上,别人一样编译运行。
#2 回 dbzhang800 的帖子 [lanmanck 06-17 21:31]
dbzhang800:designer 插件不是这么玩的。
1. 首先,定义的你的自定义Widget,源码 *.h *.cpp
编译后得到 .*h *.dll *.lib
你这样,你在QtCreator(designer 中直接提升即可)或者其他地方都可以用的。
....... (2020-06-17 20:20)
楼上的兄台,提升我会玩了,但是这有2个不足:
1、暴露源码,团队开发不合适
2、组合多个控件在一起很麻烦
3、设计时无法直观看到效果
使用creator那种拖拽方式肯定是不二之选。
我上面举例是最基本的,实际我有个工程已经做好了UI了,就是遇到编译链接问题。
现在我运行,它提示:QWidget: Must construct a QApplication before a QWidget
#3 [lanmanck 06-17 21:35]
传一个框架工程和我其他工程实例图,目前就遇到链接问题了!
这个百度文章一毛一样,我就是编译不通过!
https://jingyan.baidu.com/article/1974b28948be6cf4b1f774be.html
#4 回 lanmanck 的帖子 [dbzhang800 06-17 21:55]
lanmanck:楼上的兄台,提升我会玩了,但是这有2个不足:
1、暴露源码,团队开发不合适
2、组合多个控件在一起很麻烦
3、设计时无法直观看到效果
....... (2020-06-17 21:31)
插件只解决你的第三个问题
#5 回 dbzhang800 的帖子 [lanmanck 06-18 08:31]
dbzhang800:插件只解决你的第三个问题 (2020-06-17 21:55)
第二第三都可以解决吧,那如何不带源码编译呢?可否指点?
飞扬青云听说过吗?他提供了一堆插件没源码但却可以编译,如何解释?
这些兄弟都可以编译运行,不知道如何来的?
https://www.cnblogs.com/georgeOfChina/p/7773141.html
https://www.jianshu.com/p/b69e026d47f0