QT+vtk的一个问题:无法解析的外部符号

tuxiaodi13 2016-03-01 10:05:19
先贴错误
test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall QVTKWidget::~QVTKWidget(void)" (__imp_??1QVTKWidget@@UAE@XZ),该符号在函数 "public: virtual __thiscall test::~test(void)" (??1test@@UAE@XZ) 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QVTKWidget::QVTKWidget(class QWidget *,class QFlags<enum Qt::WindowType>)" (__imp_??0QVTKWidget@@QAE@PAVQWidget@@V?$QFlags@W4WindowType@Qt@@@@@Z),该符号在函数 "public: __thiscall test::test(class QWidget *)" (??0test@@QAE@PAVQWidget@@@Z) 中被引用
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall QVTKWidget::metaObject(void)const " (?metaObject@QVTKWidget@@UBEPBUQMetaObject@@XZ)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall QVTKWidget::qt_metacast(char const *)" (?qt_metacast@QVTKWidget@@UAEPAXPBD@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall QVTKWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@QVTKWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual bool __thiscall QVTKWidget::event(class QEvent *)" (?event@QVTKWidget@@MAE_NPAVQEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::mousePressEvent(class QMouseEvent *)" (?mousePressEvent@QVTKWidget@@MAEXPAVQMouseEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::mouseReleaseEvent(class QMouseEvent *)" (?mouseReleaseEvent@QVTKWidget@@MAEXPAVQMouseEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::mouseMoveEvent(class QMouseEvent *)" (?mouseMoveEvent@QVTKWidget@@MAEXPAVQMouseEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::wheelEvent(class QWheelEvent *)" (?wheelEvent@QVTKWidget@@MAEXPAVQWheelEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::keyPressEvent(class QKeyEvent *)" (?keyPressEvent@QVTKWidget@@MAEXPAVQKeyEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::keyReleaseEvent(class QKeyEvent *)" (?keyReleaseEvent@QVTKWidget@@MAEXPAVQKeyEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::focusInEvent(class QFocusEvent *)" (?focusInEvent@QVTKWidget@@MAEXPAVQFocusEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::focusOutEvent(class QFocusEvent *)" (?focusOutEvent@QVTKWidget@@MAEXPAVQFocusEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::enterEvent(class QEvent *)" (?enterEvent@QVTKWidget@@MAEXPAVQEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::leaveEvent(class QEvent *)" (?leaveEvent@QVTKWidget@@MAEXPAVQEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::paintEvent(class QPaintEvent *)" (?paintEvent@QVTKWidget@@MAEXPAVQPaintEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::moveEvent(class QMoveEvent *)" (?moveEvent@QVTKWidget@@MAEXPAVQMoveEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::resizeEvent(class QResizeEvent *)" (?resizeEvent@QVTKWidget@@MAEXPAVQResizeEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::contextMenuEvent(class QContextMenuEvent *)" (?contextMenuEvent@QVTKWidget@@MAEXPAVQContextMenuEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::dragEnterEvent(class QDragEnterEvent *)" (?dragEnterEvent@QVTKWidget@@MAEXPAVQDragEnterEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::dragMoveEvent(class QDragMoveEvent *)" (?dragMoveEvent@QVTKWidget@@MAEXPAVQDragMoveEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::dragLeaveEvent(class QDragLeaveEvent *)" (?dragLeaveEvent@QVTKWidget@@MAEXPAVQDragLeaveEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QVTKWidget::dropEvent(class QDropEvent *)" (?dropEvent@QVTKWidget@@MAEXPAVQDropEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall QVTKWidget::showEvent(class QShowEvent *)" (?showEvent@QVTKWidget@@UAEXPAVQShowEvent@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual bool __thiscall QVTKWidget::nativeEvent(class QByteArray const &,void *,long *)" (?nativeEvent@QVTKWidget@@MAE_NABVQByteArray@@PAXPAJ@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall QVTKWidget::SetRenderWindow(class vtkRenderWindow *)" (?SetRenderWindow@QVTKWidget@@UAEXPAVvtkRenderWindow@@@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual class vtkRenderWindow * __thiscall QVTKWidget::GetRenderWindow(void)" (?GetRenderWindow@QVTKWidget@@UAEPAVvtkRenderWindow@@XZ)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual class QVTKInteractor * __thiscall QVTKWidget::GetInteractor(void)" (?GetInteractor@QVTKWidget@@UAEPAVQVTKInteractor@@XZ)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall QVTKWidget::setAutomaticImageCacheEnabled(bool)" (?setAutomaticImageCacheEnabled@QVTKWidget@@UAEX_N@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall QVTKWidget::isAutomaticImageCacheEnabled(void)const " (?isAutomaticImageCacheEnabled@QVTKWidget@@UBE_NXZ)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall QVTKWidget::setMaxRenderRateForImageCache(double)" (?setMaxRenderRateForImageCache@QVTKWidget@@UAEXN@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual double __thiscall QVTKWidget::maxRenderRateForImageCache(void)const " (?maxRenderRateForImageCache@QVTKWidget@@UBENXZ)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual class vtkImageData * __thiscall QVTKWidget::cachedImage(void)" (?cachedImage@QVTKWidget@@UAEPAVvtkImageData@@XZ)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual bool __thiscall QVTKWidget::paintCachedImage(void)" (?paintCachedImage@QVTKWidget@@MAE_NXZ)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual class QPaintEngine * __thiscall QVTKWidget::paintEngine(void)const " (?paintEngine@QVTKWidget@@UBEPAVQPaintEngine@@XZ)
1>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static class vtkImageViewer2 * __cdecl vtkImageViewer2::New(void)" (__imp_?New@vtkImageViewer2@@SAPAV1@XZ),该符号在函数 "public: static class vtkSmartPointer<class vtkImageViewer2> __cdecl vtkSmartPointer<class vtkImageViewer2>::New(void)" (?New@?$vtkSmartPointer@VvtkImageViewer2@@@@SA?AV1@XZ) 中被引用
1>D:\VS10.0\MyProjects\QT\test\Win32\Debug\\test.exe : fatal error LNK1120: 37 个无法解析的外部命令

下面是代码,求助啊,各位大神
test.h
#ifndef TEST_H
#define TEST_H

#include <QtWidgets/QMainWindow>
#include "ui_test.h"
#include<vtkSmartPointer.h>

class vtkImageViewer2;
class vtkRenderer;
//class QPushButton;
class QVTKWidget;


class test : public QMainWindow
{
Q_OBJECT

public:
test(QWidget *parent = 0);
~test();

private:
Ui::testClass ui;

private slots:
void onOpenSlot();

private:
vtkSmartPointer<vtkImageViewer2> m_pImageViewer;
vtkSmartPointer<vtkRenderer> m_pRenderer;
//QPushButton pushButton;
QVTKWidget m_QVTKWidget;
};
#endif // TEST_H

test.cpp
#include "test.h"
#include<qfiledialog.h>
#include<qdir.h>
#include<vtkRenderWindow.h>
#include<vtkRenderer.h>
#include<vtkImageViewer2.h>
#include<QVTKWidget.h>
#include<vtkJPEGReader.h>
#include<vtkImageActor.h>
#include<ui_test.h>
#include<qpushbutton.h>


test::test(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);

m_pImageViewer=vtkSmartPointer<vtkImageViewer2>::New();
m_pRenderer=vtkSmartPointer<vtkRenderer>::New();

//设置m_QVTKWidget的渲染器
m_QVTKWidget.GetRenderWindow()->AddRenderer(m_pRenderer);

//连接打开的信号与相应的槽
connect(ui.pushButton,SIGNAL(triggered()),this,SLOT(onOpenSlot()));

}

test::~test()
{

}

void test::onOpenSlot()
{
QString filter;
filter="JPEG image file(*.jpg *.jpeg)";

QDir dir;
QString fileName=QFileDialog::getOpenFileName(this,QString(tr("打开图像")),dir.absolutePath(),filter);
if(fileName.isEmpty()==true)return;

//支持带中文路径的读取
QByteArray ba=fileName.toLocal8Bit();
const char*fileName_str=ba.data();

//用vtkIPEGReader读取JPG图像
vtkSmartPointer<vtkJPEGReader>reader=vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName(fileName_str);

//将reader的输出作为m_pImageViewer的输入,并设置m_ImageViewer与渲染器m_pRenderer的关联
m_pImageViewer->SetInputData(reader->GetOutput());
m_pImageViewer->UpdateDisplayExtent();
m_pImageViewer->SetRenderWindow(m_QVTKWidget.GetRenderWindow());
m_pImageViewer->SetRenderer(m_pRenderer);
m_pImageViewer->SetupInteractor(m_QVTKWidget.GetRenderWindow()->GetInteractor());
m_pImageViewer->SetSliceOrientationToXY();//默认就是这个方向的
m_pImageViewer->GetImageActor()->InterpolateOff();
m_pRenderer->ResetCamera();
m_pRenderer->DrawOn();
m_QVTKWidget.GetRenderWindow()->Render();
}

main.cpp
#include "test.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
test w;
w.show();
return a.exec();
}
...全文
2198 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
大鼻孔 2017-11-23
  • 打赏
  • 举报
回复 2
楼主的解决办法在百度贴吧的别的帖子上看到,试过之后基本不行,折腾了两天解决问题,在此分享一下我的解决过程,希望跟我一样的兄弟不要走弯路。 配置vtk7.0发现的问题,使用的是网上博客里分享的配置方法,把qvtkwidget的lib和dll都添加进去之后也不好使,直觉上是缺少了lib和dll,后来突然想起来在vtk6.3配置成功过,果断把网上流传的7.0版本配置的添加的lib的列表与我的6.3进行了类比,发现缺少了几个比较重要的 libvtkgl2ps-7.0.lib vtkGUISupportQt-7.0.lib vtkGUISupportQtSQL-7.0.lib vtkIOParallelXML-7.0.lib vtkRenderingContextOpenGL-7.0.lib vtkRenderingGL2PS-7.0.lib vtkViewsQt-7.0.lib vtkRenderingVolumeOpenGL-7.0.lib vtkRenderingQt-7.0.lib vtkRenderingOpenGL-7.0.lib vtkRenderingLIC-7.0.lib vtkGUISupportQtOpenGL-7.0.lib vtkGUISupportQtWebkit-7.0.lib 如果没有在自己编译的vtk中发现这些lib和dll应该是用cmake编译时没有把所有的qt选项选中,需要重新编译一次。我这次在添加之后编译就通过了。 在此共享一下,如果是一样的问题的兄弟check一下自己的lib是不是加全了与qt相关的,不敢说保证对,分享一种思路。
GUSIA 2016-06-15
  • 打赏
  • 举报
回复
怎么解决的?
sinat_28345481 2016-05-25
  • 打赏
  • 举报
回复
楼主 看不了有道笔记啊
yGIS 2016-03-20
  • 打赏
  • 举报
回复
求楼主分享方法啊,怎么打不开有道云笔记呢???????????????????
boylafong 2016-03-01
  • 打赏
  • 举报
回复
引用 3 楼 tuxiaodi13 的回复:
[quote=引用 2 楼 boylafong 的回复:] 再就是你有没有用的dll文件中的函数,需要链结进来
你好,是说对应的lib文件和头文件吗,都添加了啊。。[/quote] 你是link近来的还是动态加载的。 这中问题90%是找不到链接的文件或者动态库
tuxiaodi13 2016-03-01
  • 打赏
  • 举报
回复
引用 2 楼 boylafong 的回复:
再就是你有没有用的dll文件中的函数,需要链结进来
你好,是说对应的lib文件和头文件吗,都添加了啊。。
boylafong 2016-03-01
  • 打赏
  • 举报
回复
再就是你有没有用的dll文件中的函数,需要链结进来
boylafong 2016-03-01
  • 打赏
  • 举报
回复
对应函数所在文件有没有加入你的工程当中,不是拷贝到目录下就可以的
tuxiaodi13 2016-03-01
  • 打赏
  • 举报
回复
引用 4 楼 boylafong 的回复:
[quote=引用 3 楼 tuxiaodi13 的回复:] [quote=引用 2 楼 boylafong 的回复:] 再就是你有没有用的dll文件中的函数,需要链结进来
你好,是说对应的lib文件和头文件吗,都添加了啊。。[/quote] 你是link近来的还是动态加载的。 这中问题90%是找不到链接的文件或者动态库 [/quote] 谢谢!我一怒之下把所有的vtk中的lib文件都链接了(其实不用这么笨的,我写了个笔记附上链接,感兴趣的盆友可以看一下,希望会有帮助)。然后这个错误终于通过了。 http://note.youdao.com/web/file/XIHfSZ2/note/WEB0b5c1a89dffeba70f9bfbd5cca3dc84e
tuxiaodi13 2016-03-01
  • 打赏
  • 举报
回复
这样的

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧