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. P4512 【模板】多项式除法

    思路 多项式除法板子 多项式除法 给出\(A(x)\)和\(B(x)\),求一个\(n-m\)次的多项式\(D(x)\),一个\(m-1\)次多项式\(R(x)\),满足 \[ A(x)=B(x)D( ...

  2. Linux——命令

    1.pod2text    # 功能输出处理对象(脚本)中的的=head1 ...=head1 ......=cut框架中的信息 2.date           # 输出时间  eg: Sat Ju ...

  3. svg(二)---半瓶子晃荡

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. spring 集成 mybatis

    在日常的开发中,我们经常需要这样对MyBatis和Spring进行集成,把sqlSessionFactory交给Spring管理,通常情况下,我们这样配置: <bean id="sql ...

  5. 一、Beego介绍与项目创建及启动

    一.beego 简介 beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API.Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 torna ...

  6. C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑

    using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...

  7. 8个让DevOps转型取得成功的关键步骤

    ​​关注嘉为科技,获取运维新知 在数字化时代,企业需要更快更灵活的交付来支持业务运营,这种迫切的需求促成了DevOps的高速发展,成为了企业获得竞争优势的关键.尽管大家都知道DevOps给业务带来的好 ...

  8. Android:手把手教你 实现Activity 与 Fragment 相互通信,发送字符串信息(含Demo)

    前言Activity 与 Fragment 的使用在Android开发中非常多今天,我将主要讲解 Activity 与 Fragment 如何进行通信,实际上是要解决两个问题: Activity 如何 ...

  9. Redis缓存设计及常见问题

    Redis缓存设计及常见问题 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.下面会介绍缓存使 用技巧和设计方案,包含如下内容:缓存的收益和成本分析.缓存更新策略的 ...

  10. Fedora 23 U盘启动出现“Failed to load ldlinux.c32”解决

    利用UltraISO制作了Fedora 23的U盘启动,开机F12键USB启动时出现 Failed to load ldlinux.c32 Boot failed: please change dis ...