zoukankan      html  css  js  c++  java
  • static struct QMetaObject const QwtPlot::staticMetaObjec

    转载自http://blog.csdn.net/zxgis/article/details/7866170

    使用QWT进行二维曲线绘制,使用方法如下:

    class Plot: public QwtPlot

    {

       Q_OBJECT

    ……

    }

    此时报错:error LNK2001: 无法解析的外部符号"public: static struct QMetaObject const QwtPlot::staticMetaObject"

    出现这样的连接错误一般都是由于QwtPlot类的头文件中没有加Q_OBJECT而导致的,QwtPlot是QWT提供的类,怎么可能没有加Q_OBJECT宏呢?好吧,那就老老实实的跟踪打开QwtPlot类的头文件看看吧(没法查看QwtPlot的.cpp文件,应为QWT通过动态库的方式提供这些类的)

    class QWT_EXPORT QwtPlot: public QFrame, public QwtPlotDict

    {

        Q_OBJECT

    ……

    }

           我晕!QwtPlot类加宏Q_OBJECT了,那为什么还会出现这个连接错误?这是什么原因?QWT已经是非常成熟的QT关于二维曲线绘制的开源框架了,也不可能会出现这样的低级错误。算了,换种使用方法试试吧:

    class Plot: public QwtPlot

    {

      //Q_OBJECT

    ……

    }

           注销掉派生类中的Q_OBJEXT,疯了。居然编译通过了!这又是什么原因?OK!我已无能为力,还是交给高手吧!……!五分钟后,高手回复了(不愧是高手)!

           由于预处理所带来的问题

           QWT通过动态库抛出类的方式将类QwtPlot抛出供使用者使用,我们来看一下抛出地方时如何定义的(位于qwt_golbal.h):

    #ifdef QWT_DLL

    #if defined(QWT_MAKEDLL)     // create a Qwt DLL library

    #define QWT_EXPORT  __declspec(dllexport)

    #define QWT_TEMPLATEDLL

    #else                        // use a Qwt DLL library

    #define QWT_EXPORT  __declspec(dllimport)

    #endif

    #endif // QWT_DLL

        我们应该怎么理解上面这段代码呢?只有在预处理的时候定义了 QWT_DLL才能使用QWT的抛出类,否则就会出错!这个道理同样适用于我们自己生成的动态库,VS2008中的设置方法如下图所示:


    至此问题解决

  • 相关阅读:
    day04--项目前端相关基础知识(二)
    day03--项目前端相关基础知识
    day02--环境搭建与讲师管理接口开发
    module3_PC端静态页面项目初始化
    module3_03_写静态页面需要注意的点
    module3_02_静态页面项目初始化
    module3_01_版心与页面排版布局
    学习上遇到的坑
    flex布局相关
    background中url后面按的数意思
  • 原文地址:https://www.cnblogs.com/lulululu/p/3693861.html
Copyright © 2011-2022 走看看