使用QScintilla产生lnk2001错误

何以诚 2015-02-03 09:46:50
前几天学习Qt的时候学到如何做一个MDI程序,初次尝试使用QTextEdit成功,但我想把它做的强大一点,于是在网上找到了QScintilla组件,并使用命令:
qmake xxx.pro
nmake
nmake install 成功编译 并且以如下的方式运行成功:

于是我打算正式开始编写代码,之后的编写工作我是用继承来实现的,如图:

但是却产生了如下的链接错误:
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,如图:

倘若我这样写代码,必定产生如上面一样的链接错误,渴望前辈们指出我的错误,如果有耐心可以解答给我听,我愿意虚心学习,
谢谢!
...全文
464 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
d821040387 2016-06-16
  • 打赏
  • 举报
回复
这两句改写成这样 //精确的括号匹配 textEdit->setBraceMatching(QsciScintilla::StrictBraceMatch); //设置折叠 textEdit->setFolding(QsciScintilla::BoxedTreeFoldStyle);
此后三年 2015-02-03
  • 打赏
  • 举报
回复
这是链接错误, 意味着你的代码里有东西编译器没找到,估计你使用了QScintilla组件的静态库, 但是你自己的测试程序没找到静态库的路径。 你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。 这种解决方法有两个, 1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。 2、 在系统环境变量里修改LIBRARY_PATH 的值, 将用到的lib路劲添加进去
何以诚 2015-02-03
  • 打赏
  • 举报
回复
引用 3 楼 a30037338 的回复:
原来你是在windows下, debug和release 区分开没, QScintilla组件你使用的是他的lib还是dll
那个库只有release版本,lib + dll吧,因为他要求一个dll放到bin里面呢。不过现在我已经解决了
此后三年 2015-02-03
  • 打赏
  • 举报
回复
原来你是在windows下, debug和release 区分开没, QScintilla组件你使用的是他的lib还是dll
何以诚 2015-02-03
  • 打赏
  • 举报
回复
引用 1 楼 a30037338 的回复:
这是链接错误, 意味着你的代码里有东西编译器没找到,估计你使用了QScintilla组件的静态库, 但是你自己的测试程序没找到静态库的路径。 你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。 这种解决方法有两个, 1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。 2、 在系统环境变量里修改LIBRARY_PATH 的值, 将用到的lib路劲添加进去
demo 是我自己写的。。。这个里面不能用继承,而且应该是动态编译的,因为它生成dll要求放到qt的bin里面,官方给的demo里面他是作为包含关系使用的,也就是QScintilla是作为一个member,我怀疑是不是少QScintilla的moc文件,但是我把那个拷过来,报错更多

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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