使用QScintilla产生lnk2001错误

时间:2022-02-24 17:11:56
前几天学习Qt的时候学到如何做一个MDI程序,初次尝试使用QTextEdit成功,但我想把它做的强大一点,于是在网上找到了QScintilla组件,并使用命令:
qmake xxx.pro 
nmake
nmake install  成功编译 并且以如下的方式运行成功:
使用QScintilla产生lnk2001错误 
于是我打算正式开始编写代码,之后的编写工作我是用继承来实现的,如图:
使用QScintilla产生lnk2001错误
但是却产生了如下的链接错误:
moc_chanEditerWidget.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QsciScintilla::staticMetaObject" (?staticMetaObject@QsciScintilla@@2UQMetaObject@@B)
1>F:\qt_project\chanEditer\x64\Debug\\chanEditer.exe : fatal error LNK1120: 1 个无法解析的外部命令
这使得我非常困惑,于是我做了一个实验,在继承QScintilla的情况下,不能使用Q_OBJECT,如图:
使用QScintilla产生lnk2001错误
倘若我这样写代码,必定产生如上面一样的链接错误,渴望前辈们指出我的错误,如果有耐心可以解答给我听,我愿意虚心学习,
谢谢!

5 个解决方案

#1


这是链接错误, 意味着你的代码里有东西编译器没找到,估计你使用了QScintilla组件的静态库, 但是你自己的测试程序没找到静态库的路径。

你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。

这种解决方法有两个, 
1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。

2、 在系统环境变量里修改LIBRARY_PATH  的值, 将用到的lib路劲添加进去

#2


引用 1 楼 a30037338 的回复:
这是链接错误, 意味着你的代码里有东西编译器没找到,估计你使用了QScintilla组件的静态库, 但是你自己的测试程序没找到静态库的路径。

你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。

这种解决方法有两个, 
1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。

2、 在系统环境变量里修改LIBRARY_PATH  的值, 将用到的lib路劲添加进去
demo 是我自己写的。。。这个里面不能用继承,而且应该是动态编译的,因为它生成dll要求放到qt的bin里面,官方给的demo里面他是作为包含关系使用的,也就是QScintilla是作为一个member,我怀疑是不是少QScintilla的moc文件,但是我把那个拷过来,报错更多

#3


原来你是在windows下,  debug和release 区分开没, QScintilla组件你使用的是他的lib还是dll

#4


引用 3 楼 a30037338 的回复:
原来你是在windows下,  debug和release 区分开没, QScintilla组件你使用的是他的lib还是dll
那个库只有release版本,lib + dll吧,因为他要求一个dll放到bin里面呢。不过现在我已经解决了

#5


这两句改写成这样
  
  //精确的括号匹配
    textEdit->setBraceMatching(QsciScintilla::StrictBraceMatch);

    //设置折叠
    textEdit->setFolding(QsciScintilla::BoxedTreeFoldStyle);

#1


这是链接错误, 意味着你的代码里有东西编译器没找到,估计你使用了QScintilla组件的静态库, 但是你自己的测试程序没找到静态库的路径。

你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。

这种解决方法有两个, 
1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。

2、 在系统环境变量里修改LIBRARY_PATH  的值, 将用到的lib路劲添加进去

#2


引用 1 楼 a30037338 的回复:
这是链接错误, 意味着你的代码里有东西编译器没找到,估计你使用了QScintilla组件的静态库, 但是你自己的测试程序没找到静态库的路径。

你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。

这种解决方法有两个, 
1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。

2、 在系统环境变量里修改LIBRARY_PATH  的值, 将用到的lib路劲添加进去
demo 是我自己写的。。。这个里面不能用继承,而且应该是动态编译的,因为它生成dll要求放到qt的bin里面,官方给的demo里面他是作为包含关系使用的,也就是QScintilla是作为一个member,我怀疑是不是少QScintilla的moc文件,但是我把那个拷过来,报错更多

#3


原来你是在windows下,  debug和release 区分开没, QScintilla组件你使用的是他的lib还是dll

#4


引用 3 楼 a30037338 的回复:
原来你是在windows下,  debug和release 区分开没, QScintilla组件你使用的是他的lib还是dll
那个库只有release版本,lib + dll吧,因为他要求一个dll放到bin里面呢。不过现在我已经解决了

#5


这两句改写成这样
  
  //精确的括号匹配
    textEdit->setBraceMatching(QsciScintilla::StrictBraceMatch);

    //设置折叠
    textEdit->setFolding(QsciScintilla::BoxedTreeFoldStyle);