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 | 记录自己遇到的报错的更多相关文章

  1. 报错记录(xml抬头报错)

    报错记录(xml抬头报错) Referenced file contains errors (http://www.springframework.org/schema/beans/spring-be ...

  2. qt unknown type name编译报错记录

    在classA中include class B,然后定义成员变量的时候,报错unknown type name了. 一共有两种可能造成这种问题: 1.circle include,同时在classA中 ...

  3. 实战记录之SQL server报错手工注入

    前言 最近测试了一个站点,这个站点挺有意思,发现没有关闭错误提示,初步猜测是SQL server数据库,后来验证确实是.在这里记录一下实战过程,并详细讲解一下用到的知识点. SQL server报错注 ...

  4. 开发错误记录11:git报错 fatal:open /dev/null or dup failed: No such file or directory

    今天在自己的的电脑上装了git,没成想运行报错: 重装了几次git ,都不行,电脑上没有装github桌面版; 后来在网上查到了方法,反映这是系统的问题: null是比较特殊的系统文件,它实际上是为操 ...

  5. 记录微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function

    微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function 这个报错是在将数组对象通过 ...

  6. 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成功后我们可以看到 ...

  7. [问题记录.dotnet]取网卡信息报错"找不到"-WMI - Not found

    异常: System.Management.ManagementException: 找不到     在 System.Management.ManagementException.ThrowWith ...

  8. 记录一次爬虫报错:Message: Failed to decode response from marionette

    由于标题中的错误引发: Message: Tried to run command without establishing a connection 解释: 先说一下我的爬虫架构,用的是firefo ...

  9. (错误记录)git push 报错 403

    在push的时候遇到错误: RPC failed; HTTP curl The requested URL returned error: Forbidden 如果是自己创建的项目的话,可以在网上找到 ...

随机推荐

  1. Python 协程了解

    协程: 1.协程,又称微线程,纤程.英文名Coroutine. 2.协程是跑在线程内的单线程,串行没有锁. 3.协程是一种用户态的轻量级线程. 4.协程CPU是访问不到的,协程是用户自己控制的.   ...

  2. Maven+SSM框架(Spring+SpringMVC+MyBatis)(二)

    1.基本概念 2.开发环境搭建 3.Maven Web项目创建 4.SSM整合 此次整合我分两个配置文件: 1)分别是spring-mybatis.xml,包含spring和mybatis的配置文件, ...

  3. rman实验——测试备份压缩

    oracle rman自带的备份压缩机制,可以有效的压缩备份的大小,降低磁盘的占用率.但是也会因为压缩而消耗更多的系统性能,和增加备份时间.现在就通过实验来看压缩和不压缩的区别. 进行不压缩全备 RM ...

  4. ant___令牌过滤器

    令牌过滤器允许我们在复制时过滤文件中的数据.要进行过滤,需要使用一个必须与过滤器任务中的@token @设置匹配的标记.任务使用@作为标记分隔符.为了实现此功能,apache ant提供了使用toke ...

  5. react-router 4.0(四)跳转404

    import React from 'react' import ReactDOM from 'react-dom' import { HashRouter, Route, Link, Prompt, ...

  6. 【常见错误】Quartz常见错误

    1.集群之后把其中一个Quartz服务停了,其他的也不接手工作 问题描述 集群之后,A节点执行了大多数任务,B节点大部分时间处于空闲,停掉A节点,B节点也不会接手工作. 解决方式 修改Quartz的配 ...

  7. Windowsphone8外包团队——wp8控件学习资源整理

    一天一天学 windows phone 控件 之  Slider(十七) 摘要:Slider 是我们最常见的控件之一,看到最多的一般在两个地方 ,一个是声音的大小,一个是色域.控制声音大小的网上很多, ...

  8. linux软件管理之概述

    软件包管理 ====================================================================================安装/查询/卸载 一 ...

  9. 机器学习 之梯度提升树GBDT

    目录 1.基本知识点简介 2.梯度提升树GBDT算法 2.1 思路和原理 2.2 梯度代替残差建立CART回归树 1.基本知识点简介 在集成学习的Boosting提升算法中,有两大家族:第一是AdaB ...

  10. RobotFramework--环境安装1

    1.RobotFramework RobotFramework 的架构是一个通用型的验收测试和验收测试驱动开发的自动化测试框架(ATDD).它 具有易于使用的表格来组织测试过程和测试数据. 3.1版本 ...