• 2093阅读
  • 12回复

[提问]烦死了,各位大佬帮下忙,如何自定义控件并编译通过? [复制链接]

上一主题 下一主题
离线lanmanck
 

只看楼主 倒序阅读 楼主  发表于: 2020-06-17
网上找了一通,在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 的,这个倒可以编译通过,但是一运行就报错,到底咋回事咧???



精彩博客:labisart.com
离线dbzhang800

只看该作者 1楼 发表于: 2020-06-17
designer 插件不是这么玩的。

1. 首先,定义的你的自定义Widget,源码 *.h  *.cpp
    编译后得到 .*h *.dll *.lib
    你这样,你在QtCreator(designer 中直接提升即可)或者其他地方都可以用的。

2. 然后你想更近一步,不想使用designer中的提升。而是想像QPushButton一样直接拖拽
    这时,你才需要写一个 .dll 插件。该插件依赖前面的 *.dll
    
    这个插件对程序没有任何影响(只解决一个拖拽问题),拖拽后,你还是需要使用你第一步写的东西。

3. 你的程序,在没有插件的QtCeator上,别人一样编译运行。
离线lanmanck

只看该作者 2楼 发表于: 2020-06-17
回 dbzhang800 的帖子
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
精彩博客:labisart.com
离线lanmanck

只看该作者 3楼 发表于: 2020-06-17
传一个框架工程和我其他工程实例图,目前就遇到链接问题了!
这个百度文章一毛一样,我就是编译不通过!
https://jingyan.baidu.com/article/1974b28948be6cf4b1f774be.html




qtprojects.rar (19 K) 下载次数:4

精彩博客:labisart.com
离线dbzhang800

只看该作者 4楼 发表于: 2020-06-17
回 lanmanck 的帖子
lanmanck:楼上的兄台,提升我会玩了,但是这有2个不足:
1、暴露源码,团队开发不合适
2、组合多个控件在一起很麻烦
3、设计时无法直观看到效果
....... (2020-06-17 21:31) 

插件只解决你的第三个问题
离线lanmanck

只看该作者 5楼 发表于: 2020-06-18
回 dbzhang800 的帖子
dbzhang800:插件只解决你的第三个问题 (2020-06-17 21:55)

第二第三都可以解决吧,那如何不带源码编译呢?可否指点?
飞扬青云听说过吗?他提供了一堆插件没源码但却可以编译,如何解释?
这些兄弟都可以编译运行,不知道如何来的?
https://www.cnblogs.com/georgeOfChina/p/7773141.html
https://www.jianshu.com/p/b69e026d47f0

精彩博客:labisart.com
离线dbzhang800

只看该作者 6楼 发表于: 2020-06-18
你先学使用自定义控件吧。

a.h a.lib a.dll


先忘了degisner插件这回事,把自定义控件搞懂了,配合提升法能使用了。

然后再回来弄插件:

aplugin.dll

不然,你看别人的blog 始终看不到点上

离线lanmanck

只看该作者 7楼 发表于: 2020-06-18
终于搞定了,兄台你就指点plugin就行了,都跟你说不要弄提升了,这个兄弟是没问题的:
https://www.cnblogs.com/georgeOfChina/p/7773141.html
精彩博客:labisart.com
离线clickto

只看该作者 8楼 发表于: 2020-06-18
这个问题找刘大师请教啊
离线snow_man_0

只看该作者 9楼 发表于: 2020-06-20
我觉得要做二次开发库供别人调用,最好不要用designer,还是手写.h,.cpp,再加一个帮助文档

designer缺少几个view,widget,layout,toolbar,功能不强,简单的界面(如弹出式对话框)可以,复杂的界面还是手写的好

Qt源码里面widgets,views都是.h.cpp,好像就demo例子里面有.ui
离线lanmanck

只看该作者 10楼 发表于: 2020-06-22
回 snow_man_0 的帖子
snow_man_0:我觉得要做二次开发库供别人调用,最好不要用designer,还是手写.h,.cpp,再加一个帮助文档
designer缺少几个view,widget,layout,toolbar,功能不强,简单的界面(如弹出式对话框)可以,复杂的界面还是手写的好
Qt源码里面widgets,views都是.h.cpp,好像就demo例子里面有.u .. (2020-06-20 07:30) 

你说的这个也是没问题的。
不过呢,你不想暴露源码怎么办?
精彩博客:labisart.com
离线snow_man_0

只看该作者 11楼 发表于: 2020-06-22
回 lanmanck 的帖子
lanmanck:你说的这个也是没问题的。
不过呢,你不想暴露源码怎么办? (2020-06-22 09:16) 

界面的代码没有什么价值,算法部分封成DLL
离线lanmanck

只看该作者 12楼 发表于: 2020-06-22
回 snow_man_0 的帖子
snow_man_0:界面的代码没有什么价值,算法部分封成DLL (2020-06-22 19:01) 

我这是算法和GUI封装成一个,然后每个设备都拖过来直接用,不要太方便。因为ui和算法是一样的,每个设备都重新绑定一遍就白浪费时间了
精彩博客:labisart.com
快速回复
限100 字节
 
上一个 下一个