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,如图:
倘若我这样写代码,必定产生如上面一样的链接错误,渴望前辈们指出我的错误,如果有耐心可以解答给我听,我愿意虚心学习,
谢谢!
5 个解决方案
#1
这是链接错误, 意味着你的代码里有东西编译器没找到,估计你使用了QScintilla组件的静态库, 但是你自己的测试程序没找到静态库的路径。
你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。
这种解决方法有两个,
1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。
2、 在系统环境变量里修改LIBRARY_PATH 的值, 将用到的lib路劲添加进去
你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。
这种解决方法有两个,
1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。
2、 在系统环境变量里修改LIBRARY_PATH 的值, 将用到的lib路劲添加进去
#2
demo 是我自己写的。。。这个里面不能用继承,而且应该是动态编译的,因为它生成dll要求放到qt的bin里面,官方给的demo里面他是作为包含关系使用的,也就是QScintilla是作为一个member,我怀疑是不是少QScintilla的moc文件,但是我把那个拷过来,报错更多
#3
原来你是在windows下, debug和release 区分开没, QScintilla组件你使用的是他的lib还是dll
#4
那个库只有release版本,lib + dll吧,因为他要求一个dll放到bin里面呢。不过现在我已经解决了
#5
这两句改写成这样
//精确的括号匹配
textEdit->setBraceMatching(QsciScintilla::StrictBraceMatch);
//设置折叠
textEdit->setFolding(QsciScintilla::BoxedTreeFoldStyle);
//精确的括号匹配
textEdit->setBraceMatching(QsciScintilla::StrictBraceMatch);
//设置折叠
textEdit->setFolding(QsciScintilla::BoxedTreeFoldStyle);
#1
这是链接错误, 意味着你的代码里有东西编译器没找到,估计你使用了QScintilla组件的静态库, 但是你自己的测试程序没找到静态库的路径。
你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。
这种解决方法有两个,
1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。
2、 在系统环境变量里修改LIBRARY_PATH 的值, 将用到的lib路劲添加进去
你用它提供的demo编译运行没问题, 那么我猜Demo和 QScintilla组件 应该是在同一目录下。
这种解决方法有两个,
1、 你把QScintilla组件里的静态库拷贝到你的测试程序可执行文件同一级目录。
2、 在系统环境变量里修改LIBRARY_PATH 的值, 将用到的lib路劲添加进去
#2
demo 是我自己写的。。。这个里面不能用继承,而且应该是动态编译的,因为它生成dll要求放到qt的bin里面,官方给的demo里面他是作为包含关系使用的,也就是QScintilla是作为一个member,我怀疑是不是少QScintilla的moc文件,但是我把那个拷过来,报错更多
#3
原来你是在windows下, debug和release 区分开没, QScintilla组件你使用的是他的lib还是dll
#4
那个库只有release版本,lib + dll吧,因为他要求一个dll放到bin里面呢。不过现在我已经解决了
#5
这两句改写成这样
//精确的括号匹配
textEdit->setBraceMatching(QsciScintilla::StrictBraceMatch);
//设置折叠
textEdit->setFolding(QsciScintilla::BoxedTreeFoldStyle);
//精确的括号匹配
textEdit->setBraceMatching(QsciScintilla::StrictBraceMatch);
//设置折叠
textEdit->setFolding(QsciScintilla::BoxedTreeFoldStyle);