使用过MFC的朋友,一定对MFC中派生其提供的基本类,重载其消息响应处理函数,从而可以自由的修改MFC的控件的方式印象深刻。和多的网友就是通过这种方式来,来解决MFC中一些常用控件发现bug,而微软又长期没有给修改的问题。这种方式十分的方便灵活。而在qt中,遇到控件不能满足我们的要求,而我们要修改控件类的情况应该怎么处理呢?在这里,QT给我们提供了另外的一种方式:向designer中添加插件。下面,我介绍一下具体的实现步骤:
首先,我们要编写一个主动态库,来实现我们自己的控件。
其次,还要写一个接口动态库,用来实现designer中调用我们自己的控件。这一步很关键。这个动态库中程序结构都是qt固定的。具体参见附录。
最后,编译写好的上面两个插件,要拷贝一些文件到相应目录下:
分别将主动态库和库文件拷贝到qt安装的bin和lib目录下;
将接口动态库和库文件拷贝到qt安装目录的pluginsdesigner目录下;
将主动态库的接口头文件拷贝到qt安装目录的include目录下;
这样,我们的写的控件就添加完成了。这时打开desinger就可以在工具条中看到我们写的控件了。我们就可以像其它控件一样使用这个控件了。
附实现代码:
qwtplugin.pro
# pro file for the Qwt designer plugin
#
# Please note that the Qwt designer integration
# is limited by the current (Qt <=
3.1.x) design
# of the Qt plugin API. As soon as TrollTech will allow
# individual dialogs for complex widgets the result
# will be more satisfying.
#
# Qwt designer plugin needs Qt >= 3.x. It is
# not intended to support Qt 2.x like the Qwt lib
# does.
TARGET = qwtplugin
TEMPLATE = lib
CONFIG += qt warn_on thread plugin
MOC_DIR = moc
OBJECTS_DIR = obj
INCLUDEPATH += ../include
DESTDIR = plugins/designer
unix:LIBS += -L../lib -lqwt
win32:LIBS +=
../lib/qwt.lib
linux-g++:QMAKE_CXXFLAGS += -fno-exceptions
target.path=$(QTDIR)/plugins/designer
INSTALLS += target
HEADERS += qwtplugin.h
SOURCES += qwtplugin.cpp
IMAGES +=
pixmaps/qwtplo