• 使用自定义控件


     

            控件编写完毕以后,把生成的dll和lib文件一起拷贝到Qt安装目录下的插件目录里,比如我安装在D盘里的Qt 4.8.4,路径为:D:Qt4.8.4pluginsdesigner,拷贝进去以后,这个插件就可以被Qt Designer加载了,此时这个自定义控件就可以像普通的控件一样使用了。当然如有必要,还可以给这个控件添加一些信号和槽,另外按照经纬度的取值范围不同,做一下区分经度和维度的处理,本例中不需要这么复杂,就不再深入探索了,下面是使用自定义的经纬度输入控件的效果:

           到目前为止,我们已经可以在Qt Designer中使用自定义的控件绘制界面了,但是这个时候,事情还没有完,因为使用QtCreator时,会发现其界面设计器中并没有我们的自定义控件。另外当我们用Qt Designer绘制完控件后,编译时会发生找不到“loglatedit.h”头文件的编译错误。这个问题很容易理解,首先我们可以想到的是Qt Creator和Qt Designer的自定义控件目录是不同的,我自己的机器里,Qt和Qt Creator的安装目录如下:

           当我把自定义控件的dll和lib文件拷贝到D:Qt4.8.4pluginsdesigner目录下,再启动D:Qt4.8.4in目录下的designer.exe,这个插件可以加载到Widget Box里面去,但是如果我启动D:Qtqtcreator-2.8.1in目录下的Qt Creator,我们的插件并不会出现在Qt Creator的设计器中。因此,对于Qt Creator,我们也需要执行以下控件的安装,那么具体要安装到哪里去呢?经过在Qt Creator安装目录下一番查找,发现D:Qtqtcreator-2.8.1inpluginsdesigner这个目录下存在和D:Qt4.8.4pluginsdesigner目录下同名的dll文件,于是我们猜测这个目录就是Qt Creator的控件安装目录,接下来拷贝loglateditplugin.dll到这个目录下,之后重新打开Qt Creator,发现自定义控件加载成功了,于是第一个问题解决了。

           对于第二个问题,我们很容易想到使用一个动态库时,除了要有dll和lib文件外,还需要头文件,而对于某一版本的Qt SDK,其界面相关的头文件都放置在QtGui目录下,于是我将工程中经纬度输入控件的头文件loglatedit.h拷贝到D:Qt4.8.4includeQtGui目录下,再次试验,发现编译可以通过,但是连接失败,尝试将相应的lib文件放到D:Qt4.7.4lib目录下并且把该lib库添加为工程的依赖库,依然连接失败。这表明Qt的自定义控件工程并没有导出我们的自定义控件,因此其生成的库文件loglateditplugin.lib里并没有自定义控件的信息。因此要使用自定义控件,只能引入源码。

    通过以上实验,总结一下具体的做法,列举如下:

    1.        创建Qt 设计师自定义控件工程,编写自定义控件;

    2.        拷贝release版的dll和lib文件到Qt Designer的插件目录下,如D:Qt4.8.4pluginsdesigner,这样自定义控件即可在Qt Designer中使用;

    3.        拷贝dll文件到Qt Creator的集成Qt Designer的插件目录下,如:D:Qtqtcreator-2.8.1inpluginsdesigner,使集成于Qt Creator中的Qt Designer可以加载并使用该控件;

    4.        拷贝自定义控件的头文件和源文件到使用自定义控件的工程中,并且添加到工程里面去,这样就可以正确编译并连接了;


    参考:关于QT自定义控件(Custom Widget)相关知识总结
  • 相关阅读:
    CDQ分治
    [noip模拟赛2017.7.15]
    [noip模拟赛2017.7.11]
    [noip模拟赛2017.7.10]
    [noip模拟赛2017.7.7]
    [noip模拟赛2017.7.6]
    [noip模拟赛2017.7.4]
    回文检测
    mapreduce引用第三方jar
    Spark安装和配置
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5105386.html
Copyright © 2020-2023  润新知