• 4818阅读
  • 4回复

[提问]关于自定义控件,编译时报错,各位大侠帮忙 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2014-09-21
自己随便拖了一个自定义控件出来,但是另一个项目添加控件后,编译出错,如下:
自定义控件类为t1:


代码是:t1=new t1(Widget);
尝试把控件的ObjectName改为t2后,又报其他



只看该作者 1楼 发表于: 2014-09-21
各位看看是什么情况,谢了
本帖提到的人: @dbzhang800
离线dbzhang800

只看该作者 2楼 发表于: 2014-09-21
你需要了解一个事实:在UI中使用自定义控件,有插件法和提升法两种方式。二者是等价的,也就是说,你给designer写插件,对你的程序没有多少用途。

插件法的典型用法如下:
1. 你写了一大堆的自定义控件。
w1.h/w1.cpp w2.h/w2.cpp w3.h/w3.cpp ...

2. 你将其做成动态库

w.dll 或 w.so 或其他后缀

2.1 我们都知道,要使用这堆控件,就是 include 头文件,链接你的 w 动态库。这就不足够了。如要在designer中使用,直接提升法也很容易(提升的时候,你需要告诉它头文件,这样就自动出现在 ui_xxxx.h中了)。

3. 但为了要在designer中拖拽使用,或者你在designer中看到你的自动以控件的样子,你就编写了一个插件

w_plugin.dll 或 w_plugin.so 或 ...

3.1 但说到底,这个插件和你的程序没有什么关系。你的程序还是需要,include头文件(编写插件时,你已经告诉它你的头文件,这样就自动出现在 ui_xxxx.h中了),并链接你的 w 动态库。
离线dbzhang800

只看该作者 3楼 发表于: 2014-09-21
如果不用 动态库/静态库的话,你就必须将自定义控件的 .h .cpp 加入到你工程的 HEADERS 和 SOURCES 中

只看该作者 4楼 发表于: 2014-09-21
我就是想做第三种那个可以拖拽的,已经把插件的Realease版本中的dll拷贝到了Qt和QtCreator中的designer文件夹中,
也在项目里添加了t1.h和t1.cpp
代码如下:
SOURCES += main.cpp\
        mainwindow.cpp \
    t1.cpp

HEADERS  += mainwindow.h \
    t1.h

上面第三点中是指include插件头文件还是控件头文件,我注意到有两个,动态链接库怎么实现,include就可以吗??
本帖提到的人: @dbzhang800
快速回复
限100 字节
 
上一个 下一个