QT | 记录自己遇到的报错
QT 常见报错,及相应对策
0. 遇到所有莫名其妙的问题(完全按照教程,但一直报错)
- 删除工程文件同级目录下的构建文件(以build开头的文件夹)
- 重新执行qmake
- 重新构建项目
- 检查所有的路径问题,特别是依赖库的路径问题
- 有时候遇到了问题A,其实是问题B引起的,所以,可以先记下问题A,然后继续做,可能问题A不知不觉就被解决了……
- 去GOOGLE用英文搜索问题
- 找网上能运行的样例,新建一个工程作为测试;如果可以的话,仔细对比和自己的工程的区别
1. The program has unexpectedly finished. 程序异常结束
此时可能可以BUILD通过,但是再运行时出现这个错误。 一般是由于某个DLL库没有被找到,比如opencv的。
OpenCV的配置过程中我遇到了一个BUG,按照http://blog.csdn.net/poem_qianmo/article/details/19809337的提示,
1. 先在系统中配置好环境变量(注意环境变量有上下两个窗格,上面是“用户环境变量”,下面是“系统环境变量”,为了保险,还是放在“系统环境变量”中比较安全)
2. 在VS中的“属性”设置中配置好
然而还是无法运行,显示“The program can't start because opencv_world300.dll is missing from your computer”,即缺少DLL文件。这个DLL文件理论上在配置环境变量时已经添加到系统的调用中了,但是还是无法找到,是一个BUG。
怎么解决呢?简单粗暴,将所有相关的DLL文件(我的是在D:\Qt\opencv3\build\x64\vc14\bin)复制到C:\Windows\System32下即可(系统必定会去这个目录下调用DLL)。
而这个找不到DLL文件的错误,并不会在QT的报错中显示出来,所以在VS中创建了一个OPENCV的程序进行测试,最终发现是这个BUG。所以遇到错误了首先要冷静分析,其次要使用“控制变量法”,将OPENCV的问题从QT的整个工程中分离出来,单独对OPENCV进行测试
最后,师兄说可以在Windows Shell中使用 "echo %PATH%"的方式来查看PATH名字的环境变量都存了什么地址,然后发现……OpenCV的地址使用了中文的分号来进行间隔;改成英文的分号之后什么都没问题了……ʕ •ᴥ•ʔ 以后一定要注意啊
2. moc ****.obj:-1: error: LNK2019:
可能是在.ui的设计界面中使用了Go to slot,然后在.cpp中会自动创建一个函数,同样会在.h的类中添加上这个函数
但是如果在.cpp中删除了这个刚创建的函数,则.h中不会自动删除,此时可能会出现这个报错
一定要保持.h中创建的类,在.cpp中有相对应的函数,否则QT无法识别这个具体的错误,给出的报错信息比较迷惑
3. error: C2447: “{”: 缺少函数标题(是否是老式的形式表?)
本来项目编译运行都没问题,突然报这个错误,然后去看代码没找到问题,去翻了GIT上的历史版本也没发现和现在的代码有什么区别
突然想起来,本来这台机子安装的是英文版的Windows,但是QT每次报错都显示????,不显示中文字符,所以下载了个中文语言包,
打算把系统语言设置成中文。应该就是编码的问题,QT直接调用了系统的编码来对整个项目进行编译,所以系统编码改变了,编译也会出现肉眼无法识别的错误。
现在把系统默认语言又设置成了英文,在“Control Panel\Clock, Language, and Region”这里,Administrative->Change System Local这里又重新改成了English(United States)。貌似这里是修改对不支持Unicode的程序的语言支持库的地方,是导致这个报错的核心问题。
看来想改系统语言还得再调试一番
4. 无法解析的外部符号 未找到文件**.obj
参考:http://blog.csdn.net/hzt12345hf/article/details/52398000
无法解析的外部符号出现可能的原因:
[0]出现无法解析可能是因为lib文件不正确,比如64位的编译配置,结果使用的是32位的lib包.
[1]只写了类声明,但还没有写实现类,造成调用时无法解析
[2]声明和定义没有统一,造成链接不一致,无法解析
[3]没有在项目属性页的链接器的命令行选项加入相应的类包。
[4]没有在c++包含目录和库目录加入相应的类包路径
[5]在测试工程中被测文件目录可能需要包含被测类的cpp定义文件
[6]ICE接口测试时,无法解析可能因为被测文件没有包含进相关的cpp文件,另外,在TestSuite_ProjectRun.h文件中需要包含IProjectRun.h头文件,及相关的头文件(举例)。
[7]import相关的无法解析内容,解决办法是在链接器的依赖项中加入相应的动态库
[8]出现如下错误的原因一般是动态库没有包进来。__imp
ProjectRun.obj : error LNK2019: 无法解析的外部符号 __imp__StartHistoryLocalModule,该符号在函数 “protected: virtual int __thiscall HiRTDB::CProjectRun::DoStart(void)” (?DoStart@CProjectRun@HiRTDB@@MAEHXZ) 中被引用
[9]error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
工程属性,C/C++,代码生成,运行时库选择MDd,
[9]无法解析的外部符号”_declspec(dllimport) public: int __thiscall HiRTDB::CTagTree::GetObjectA(int,struct HiRTDB::SBaseReadProps const &,struct HiRTDB::SBaseReadValues &)” (__imp GetObjectA@CTagTree@HiRTDB@@QAEHHABUSBaseReadProps@2@AAUSBaseReadValues@2@@Z),该符号在函数”public: int __thiscall HiRTDB::CStringImpl::Get(int,struct HiRTDB::SStringReadProps const &,struct HiRTDB::SStringReadValues &)” (?Get@CStringImpl@HiRTDB@@QAEHHABUSStringReadProps@2@AAUSStringReadValues@2@@Z) 中被引用
原因可能是工程配置文件中有多余选项,请参考其他模块的配置选项,不要有多余配置。
[10]自己编了个小程序,一开始编译忘记在.pro工程中加入类库,所以导致出现如下图所示错误,加上类库后清除重新编译,发现还是同样的错误,百思不解,搜百度有网友提议删除目录下生成的调试文件夹,然后尝试过后发现此方法可行,这里做个记录,以防以后又发生这样的错误
5. QStackWidget使用后,无法切换页面,且无明显错误
首先是将各个Widget添加到QStackWidget里面
{
ui->setupUi(this);
controlEndMain *liveListManage = new controlEndMain(tableName);
serverList *serverListManage = new serverList(this);
ui->stackedWidget->addWidget(liveListManage);
ui->stackedWidget->addWidget(serverListManage);
connect(ui->toLiveListManage, SIGNAL(clicked()), this, SLOT(switchToLiveListManage()));
}
然后定义槽函数
void topFrame::switchToLiveListManage(){
ui->stackedWidget->setCurrentIndex();
qDebug() << ui->stackedWidget->currentIndex();
}
槽函数
但是就会出现问题,点击相应的按钮后并不能切换过去
实际是因为,网上的例子,如http://www.cnblogs.com/ourran/p/6691769.html
其中的QStackWidget是在代码中手工定义的,
而我的QStackWidget是在Design模式中用图形化的方式定义的
这种方式有一个隐患,就是QStackWidget会默认包含两个空页面,所以当使用
ui->stackedWidget->setCurrentIndex();
的时候,这个INDEX其实是有问题的,0和1已经被那两个默认的空界面占住了,
所以设置序号为0就会什么都不出现……而且表面上看起来完全正确
只需要去WINDOWS资源管理器里面,用notepad++把.ui文件里,QStackWidget中默认的两个页面删除就行了
6. 在数据库的插入操作中,没有明显问题,但是插入操作失败
比如下面这个语句就是一直以来的问题点
query.exec("insert into E1State values(2, '162.105.95.214', 'Running', 74.2)");
问题在哪里呢?各个数据都符合之前定义的格式
问题其实是倒数第一个逗号是中文字符……
所以以后写代码还是要保持好习惯,直接Win+空格,切换成纯英文键盘(此模式下,按Shift键不能进行中英文切换)
否则太多自己给自己挖的坑了
7. DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 ()
文件路径不对或者文件名是中文的
比如127.0.0.1:8086/01这里应该是/1,因为在VLC中填写的路径是1不是01
未完待续
QT | 记录自己遇到的报错的更多相关文章
- 报错记录(xml抬头报错)
报错记录(xml抬头报错) Referenced file contains errors (http://www.springframework.org/schema/beans/spring-be ...
- qt unknown type name编译报错记录
在classA中include class B,然后定义成员变量的时候,报错unknown type name了. 一共有两种可能造成这种问题: 1.circle include,同时在classA中 ...
- 实战记录之SQL server报错手工注入
前言 最近测试了一个站点,这个站点挺有意思,发现没有关闭错误提示,初步猜测是SQL server数据库,后来验证确实是.在这里记录一下实战过程,并详细讲解一下用到的知识点. SQL server报错注 ...
- 开发错误记录11:git报错 fatal:open /dev/null or dup failed: No such file or directory
今天在自己的的电脑上装了git,没成想运行报错: 重装了几次git ,都不行,电脑上没有装github桌面版; 后来在网上查到了方法,反映这是系统的问题: null是比较特殊的系统文件,它实际上是为操 ...
- 记录微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function
微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function 这个报错是在将数组对象通过 ...
- Qt Creator无法debug,报错:The selected debugger may be inappropriate for the inferior. Examining symbols and setting breakpoints by file name and line number may fail. The inferior is in the Portable ...
看到这个报错我是绝望的 解决:下载windows sdk win10 sdk 只安装Debugging Tools for Windows 打开 工具-选项-Kits 安装sdk成功后我们可以看到 ...
- [问题记录.dotnet]取网卡信息报错"找不到"-WMI - Not found
异常: System.Management.ManagementException: 找不到 在 System.Management.ManagementException.ThrowWith ...
- 记录一次爬虫报错:Message: Failed to decode response from marionette
由于标题中的错误引发: Message: Tried to run command without establishing a connection 解释: 先说一下我的爬虫架构,用的是firefo ...
- (错误记录)git push 报错 403
在push的时候遇到错误: RPC failed; HTTP curl The requested URL returned error: Forbidden 如果是自己创建的项目的话,可以在网上找到 ...
随机推荐
- Docker Swarm 介绍 or 工作原理
Docker Swarm 介绍 Swarm 简介 Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swar ...
- centos7救援模式--单机模式(单用户模式)
前序 经典问题: 单机模式, 当系统忘记某用户登录密码的时候可以解决密码重置问题 操作 1 开机的时候出现选择进入系统的界面时, 按E键 2 选择定位到ro这里, 替换成rw init=/sysroo ...
- 剑指offer(22)从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目分析 从下打印就是按层次打印,其实也就是树的广度遍历. 一般来说树的广度遍历用队列,利用先进先出的特点来保存之前节点,并操作之前的 ...
- IDEA的校园邮箱激活方式
链接: https://blog.csdn.net/m0_37286282/article/details/78279060
- Machine Learning--week3 逻辑回归函数(分类)、决策边界、逻辑回归代价函数、多分类与(逻辑回归和线性回归的)正则化
Classification It's not a good idea to use linear regression for classification problem. We can use ...
- java 保存到mysql数据库中文乱码
<property name="jdbcUrl">jdbc:mysql://localhost:3306/company?useUnicode=true&cha ...
- JAVA中的责任链模式(CH02)
对责任链CH01做出优化,解决耦合度太高问题 记得上一篇我们使用的是抽象类,然后用子类去继承的方法实现等级的桥接,从而发现了耦合度太高. 为了解决这个问题. 我们本次使用接口进行抽象,然后使用到一个” ...
- java笔记 -- java运算
运算符: 算术运算符: 加减乘除求余 + , - , * , / , % 当参与/运算的两个操作数都是整数时, 表示整数除法, 否则表示浮点除法. 例: 15 / 2 = 7; 15 % 2 = 1; ...
- Go语言学习之10 Web开发与Mysql数据库
本节主要内容: 1. http编程2. mysql使用 1. http编程 (1)http编程分析 Go原生支持http,import(“net/http”) Go的http服务性能和nginx比较接 ...
- [easyUI] autocomplete 简单自动完成以及ajax从服务器端完成
通过id取input标签对象,调用autocomplete方法 <script> var sources = [ "ActionScript", "Apple ...