QT+vtk的一个错误 :无法解析的外部命令

tuxiaodi13 2016-02-29 06:58:19
程序功能很简单,点击button,然后选取图片,在QVTKWidget控件中显示图片。
下面是代码:

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();
}


出现了错误

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 个无法解析的外部命令

...全文
1250 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lt882002 2016-05-08
  • 打赏
  • 举报
回复
你试下添加qvtk.lib附加依赖,有问题再说

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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