`
qimo601
  • 浏览: 3446038 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

QWT错误static struct QMetaObject const QwtPlot

    博客分类:
  • Qt
阅读更多

使用QWT例子oscilloscope出现如下错误:


error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlot::staticMetaObject" (?staticMetaObject@QwtPlot@@2UQMetaObject@@B)

 本来这个例子在examples文件下直接QtCreator打开pro运行无错的。

当我转到VS项目里就无法编译通过,原来是Qwt在pri文件里定义了一个

win32 {
    contains(QWT_CONFIG, QwtDll) {
        DEFINES    += QT_DLL QWT_DLL
    }
}


所以在VS项目里,我们也需要设置一个预处理QWT_DLL。只有在预处理的时候定义了 QWT_DLL才能使用QWT的抛出类,否则就会出错!这个道理同样适用于我们自己生成的动态库,VS2008中的设置方法如下图所示:


 

具体方法:请看下面

 

------------------------------------转载------------------------------------------

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

class Plot: public QwtPlot

{

   Q_OBJECT

……

}

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

出现这样的连接错误一般都是由于QwtPlot类的头文件中没有加Q_OBJECT而导致的,QwtPlotQWT提供的类,怎么可能没有加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中的设置方法如下图所示:



至此问题解决

 转载:http://blog.csdn.net/sta30001/article/details/6873499


 

分享到:
评论

相关推荐

    QWT入门的例子(源码Qwtplot and QDialog)

    在这个“QWT入门的例子”中,我们将深入探讨如何使用Qwtplot和QDialog组件来构建一个简单的图形用户界面。 Qwtplot是QWT库中的一个关键类,它是用于创建2D图表的主要工具。这个类提供了各种类型的图表,如曲线图、...

    qwtplot3d-0.2.7.zip_3D 曲线_QT_QT曲线_qt 3d_qt 坐标轴

    3. **创建3D绘图对象**:使用QwtPlot3D的类,如`Qwt3DSurface`或`Qwt3DCurve`,创建3D图形实例。 4. **设置数据**:通过调用对象的相关方法,如`setData()`,将数据集赋值给图形对象。 5. **配置显示属性**:你...

    QWT显示动态变化折线图

    QWT库提供了许多预定义的图形类,如QwtPlot,它是所有图形的基础类,可以用于创建包含多个轴、曲线和小部件的复杂图表。 1. **创建QwtPlot对象**:在你的代码中,首先需要创建一个QwtPlot对象,并将其添加到父窗口...

    Qt使用Qwt库绘制柱状图的经典例子.zip

    在本文中,我们将深入探讨如何在Qt环境中使用Qwt库来绘制柱状图。Qwt是一个开源库,专为科学和工程应用设计,提供了一系列用于数据可视化的组件,包括曲线图、柱状图、仪表盘等。对于需要在Qt应用程序中展示数据的...

    QT通过qwt实现曲线动态显示

    Qwt库中的`QwtPlot`类是用于创建图形区域的基础,它提供了一个画布(canvas)来放置图形元素,如曲线、轴等。你可以创建一个`QwtPlot`实例作为主窗口的内容,并在其中添加曲线对象。 对于曲线,你可以使用`...

    Qwt自定义缩放操作类QwtPlotMagnifier

    在Qt开发过程中,Qwt库是一个非常有用的工具,它提供了丰富的2D图形绘制功能,尤其适合于科学数据的可视化。QwtPlotMagnifier是Qwt库中的一个组件,用于实现放大镜效果,允许用户在图形区域上进行局部放大。本文将...

    QwtPlot 鼠标移动点

    QwtPlot是Qwt库中的一个关键类,它代表了一个二维绘图区域,可以用于显示各种图表,如线图、散点图等。通过监听鼠标事件,我们可以实现对这些图形元素的动态操作。 描述中提到的“按住鼠标左键选中点,按下shift+...

    QwtPlot动态曲线

    总的来说,"QwtPlot动态曲线"涉及的知识点包括但不限于:Qwt库的使用,QwtPlot类的创建与操作,QwtPlotCurve对象的创建和数据更新,线程同步和信号槽机制,以及图形界面的动态更新和性能优化。通过掌握这些知识,...

    qwtplot3d-0.2.7.rar

    这个“qwtplot3d-0.2.7.rar”文件正是一个已经编译好的QWT3D版本,包含了所有必要的组件和示例,方便用户快速集成到自己的项目中。 QWT3D支持多种数据类型的输入,包括但不限于数组、矩阵和向量,可以用来绘制各种...

    qwt.rar_linux Qwt_qwt_qwt linux_qwt 安装

    创建一个包含Qwt控件的窗口,例如QwtPlot,编译运行项目。如果一切顺利,你应该能看到Qwt控件正常显示。 在“qwt.txt”文件中,可能包含了安装过程中的详细日志或额外的说明,可以查看这个文件以获取更多信息。此外...

    qwtplot3d-0.3.1a.zip

    《QwtPlot3D在VS2015与QT5.7.0环境下的应用与实践》 QwtPlot3D是一个开源库,专为Qt应用程序设计,用于创建高质量的三维图形。它提供了丰富的功能,使得开发人员可以方便地在Qt环境中构建复杂的3D图表和数据可视化...

    qwtplot3d 0.3.1版本QT 3D 点云数据绘制类

    **QWTPlot3D:3D点云数据绘制在QT平台上的高级库** QWTPlot3D是一个基于Qt和OpenGL的开源库,专为在Qt应用程序中创建交互式3D图形而设计。这个库提供了丰富的功能,使得开发人员能够轻松地在QT环境下展示3D数据,...

    qt、qwt使用实例:三点组圆

    我在linux下使用qt开发,用到了qwt类库。功能是:给定三点,画出三角形、其内切圆和外接圆,画出图例、绘制坐标系,视图可以拖动、缩放。虽然是在linux下开发,但是qt和qwt都是可移植的,即源代码可以不用修改直接在...

    基于qwtplot3d实现的三维曲线

    2. **基础类和概念**:QwtPlot3D库中包含多种类,如Qwt3DSurface、Qwt3DGrid、Qwt3DCurve等,它们分别对应不同的3D图形元素。理解这些类的职责和相互关系是创建3D曲线的关键。例如,Qwt3DCurve类是用于绘制3D曲线的...

    Qt,使用qwt作曲线图

    Qwt提供了一系列的类,如QwtPlot、QwtPlotCurve、QwtPlotZoomer等,这些类可以帮助开发者快速构建复杂的2D图形界面。 要在Qt项目中使用Qwt,你需要先下载并安装Qwt库。在Linux系统中,可以通过包管理器安装,或者从...

    QWT源码和QWT的一个小例子

    3. 创建QWT组件:接着,可以创建QWT的图形组件实例,比如`QwtPlot *plot = new QwtPlot(this);`,并将其添加到你的用户界面中。 4. 设置数据和样式:然后,你需要设置组件的数据源,比如通过`QwtPlotCurve`来绘制...

    树莓派qwt绘制实时动态曲线demo

    该demo实现了简单的温湿度实时动态曲线的绘制,使用qwt-6.1.3中的QwtPlot实现,非常轻松就能够实现绘图的功能。

    qwt(已编译)

    QWT,全称为Qt Widgets for Technical Applications,是一个开源的C++库,专为科学和工程应用提供图形用户界面元件,特别是在二维数据可视化方面表现出色。它与Qt框架紧密结合,允许开发者在Qt应用程序中轻松地创建...

    Qt5.2.0环境下编译通过qwtplot3d-0.2.7

    如果编译过程中出现错误,检查你的Qt和Qwt配置,以及系统环境变量是否正确设置。错误可能包括找不到库文件、包含文件或链接问题。 一旦编译成功,你就可以在自己的Qt项目中使用QwtPlot3D了。在你的.pro文件中添加...

Global site tag (gtag.js) - Google Analytics