【经验分享】开发问题记录总结(持续更新)

目录

工具开发

        界面类继承某自定义界面类时,出现布局混乱或者所有控件集中在左上角?

        在继承自定义界面之后,以诸如 on_xxx_clicked() 模式设计的槽函数失效了?

        使用pugi接口取出文本数据后,为什么该变量无法进行字符串比较?

        在使用Pugi接口的时候为什么指令正确,但是无法通过编译器编译?

插件(Qt)开发

        在使用QLabel、QGroupBox等控件时出现字体显示不全或遮掩?

VisualStudio IDE

        启动调试遇到帧不在模块?

        报错异常中,出现 0XC0000005:读取位置0X0000000000000000时发生访问异常?

        使用static_cast将MainWindow (类型为QWidget) 转换成其他数据类型,出现空指针?                          

        在进行调试的时候,出现“未加载符号文件”?                                

        在打开应用时出现“无法找到入口”的报错?

        编译时可通过单击索引到头/cpp文件,但编译器无法检测到该文件(C1083)?  

        编译时出现缺少*.lib 又或*.dll的情况?

编译报错问题

        C2011 编译时出现“xx类型重定义”?

        C2280 “xxxxx”尝试引用已删除的函数 报错?                    

        C2039 xx不是QMetaTypeId的成员?

        MSB6006 用CMake生成代码后出现”cmd.exe”已退出? 

        LNK2019 LNK2001 无法解析的外部符号?


本文共计5252字,预计阅读时间15分钟

工具开发

        界面类继承某自定义界面类时,出现布局混乱或者所有控件集中在左上角?

        原因:这类原因与开发过程中使用到的ui.setupUi() (或者ui->setupUi() )指令有关,在设定Ui界面我们默认会直接使用this,即当前类的界面对象。而在继承时,界面的实现类会可能会对界面的排布进行重设定,所有控件的排布会根据一个以默认参数生成的Widget对象进行相对排布设置。而在QDesigner工具下设计的Ui界面的窗体排布一般是经过调整修改过的(例如窗体长、宽又或者布局等),最终造成了这类问题。

        解决方法:通过在代码层新建一个Widget对象,用来创建符合默认参数的Widget对象,并将Ui界面放在该控件上,从而解决该类问题。代码片段如下

  QWidget * widget = new QWidget();

  //欲创建的自定义界面类

 _ui = new Ui::XXxxxx(); 

 _ui->setupUi(widget);

 SetContentWidget(widget);

 //如下指令窗体的标题进

 //setWindowTitle(QString::fromLocal8Bit("定的窗体名称"));

        在继承自定义界面之后,以诸如 on_xxx_clicked() 模式设计的槽函数失效了?

        原因:首先,我们要搞清楚槽函数的绑定监听机制,在使用自定义界面类后,Ui界面实现类(这里为了举例,用HRxxxClass来表示)中有一段函数原本是ui->setupUi(this),this的指向是当前实现类的指针,槽函数在绑定监听时是默认绑定到当前实现类的,即HRxxxClass,而在设置主题时,生成的Widget控件对象在这里取代了XXxxxClass,但内部的槽函数绑定机制还是默认绑定在XXxxxClass类上,因此造成了这种现象。

        解决方法:可以通过对底层绑定机制进行重写(对.moc文件进行修改)。但这里推荐一种普遍、简单的方法,即使用connect函数来对建立控件与函数之间的连接,代码片段如下

connect(Component,&Component::event,this,&XXxxxClass::FunctionUDesigned());

//connect有三种写法,是其中一种;

        使用pugi接口取出文本数据后,为什么该变量无法进行字符串比较?

        原因:Pugi在取出值时用到的最终指令是 xx.value(),取出的数据类型是 const char * ,而char *类型的逻辑比较是用C语言中的strcmp()函数(印象中是这个),如果在比较中直接使用 == 比较符来进行判断,显然是不可行的,因为没有对该操作符进行重载(C语言中)。故造成这种现象。

        解决方法:可以通过pugi接口下的xx.as_string()指令来将该数据进行转换,然后通过 == 逻辑比较符来进行判断,亦可通过QString(xx.value())将其转换成QString型文本进行比较。代码片段如下

QString(xx.attribute("xx").value()) == QString("xxx")

        在使用Pugi接口的时候为什么指令正确,但是无法通过编译器编译?

        原因:一般出现这种情况是因为指令中出现有中文字符。首先我们应当知道,中文字符一般是以GB2312、GB18030、GBK、Big5等形式进行编码,而在开发中,C/C++编译器(GCC, Clang, MSVC等)并不是以中文字符作为默认编译编码格式的,因此在编译时编码就出了问题,故出现此类现象。

         解决方法:可以通过notepad、VSCode、VS代码保存对话框等,将该代码格式文件(*.h, *.cpp 等)统一转换成ASCII码然后保存。不过这个也可以通过修改编译器编码格式来进行解决,一般而言,在Linux (默认编码格式是UTF-8)环境下一般不会出现这类现象。

插件(Qt)开发

        在使用QLabel、QGroupBox等控件时出现字体显示不全或遮掩?

        原因:首先应当了解Qt控件中的显示受制于QSS样式表,而QSS样式表的设计模型参考于“盒子模型”,其中包含了诸多样式元素,包括:边距、边框、填充和实际内容等。由此当发现字体出现遮盖的情况下,大概率时因为文字在显示时存在边沿被其他控件遮盖,此时通过调整styleSheet即可解决这类问题。

        解决方法:通过直接在QtDesigner中对控件中的styleSheet属性进行配置,例如 padding: 4px 将填充控件拓展至 4px 使得文字得以正确显示出来;或通过代码进行设置,例如

ui->你的控件->setStyleSheet(QString("padding: 4px"));

VisualStudio IDE

        启动调试遇到帧不在模块?

        原因:一般是没有将链接器中的调试设置好,应当尝试进入项目属性页进行对链接器的设置。

        解决方法:进入项目属性界面,选择链接器中的调试选项,单击“生成调试信息”中的“生成调试信息”,启用调试。同时在C/C++中的常规选项中,选中“调试信息格式”,并选择“用于编辑并继续的程序数据库“选项,输出调试信息。具体如下图所示。

        注:保持输出目录路径与生成程序数据文件的目录路径一致。  

        报错异常中,出现 0XC0000005:读取位置0X0000000000000000时发生访问异常?

        原因:造成这个问题是由于空指针报错,此时应当在代码层进行检查,排除是否存在生成“空对象”或者“空数据”的情况

        解决方法:按住Ctrl键,用鼠标点击功能函数,定位对应的处理函数中去,对其中的代码进行分析排错,设立断点并监控堆栈调用,来定位问题所在点。

        使用static_cast将MainWindow (类型为QWidget) 转换成其他数据类型,出现空指针?                          

        原因:首先,出现这个问题是因为 static_cast 是一种强制转换方法,他会将QWidget强制转换成其他类型,而实际上,其他类型的类和QWidget之间有些属性是不一致的,且继承关系也不一致,所以很多属性在转换时会发生丢失。

        在进行调试的时候,出现“未加载符号文件”?                                

        原因:出现该问题是因为在调试模式下加载到了该动态库,但没有找到与之对应的*.pdb符号文件。

        在打开应用时出现“无法找到入口”的报错?

        原因:主要是 目标动态库版本不匹配(代码指令不匹配)或 当前项目调用方法有误,封装的动态库中存在函数指令或代码不符合调用规范。欲解决这类问题需要从调用该动态库的函数或者对调用的动态库本身进行修改。

        解决方法:

        对目标动态库编译项目进行更正,调整至与调用项目相同的代码规范然后进行重新编译输出。对调用该动态库的程序段进行检查,检查是否存在有“错误调用”、“错误的语法”、“错误的声明”等,对这些代码片段进行更正使其规范。

        编译时可通过单击索引到头/cpp文件,但编译器无法检测到该文件(C1083)?  

        原因:一般出现这种情况是因为没有在附加目录中添加该文件的路径,导致编译器无法索引到对应文件。在这里拓展一个概念,在索引项目时,VS IDE会在缓存(内存)中加载好关联文件的路径,IntelliSense也会帮你智能地加载一些关联头/CPP文件。但是在编译的时候,编译器并不会把这些路径读取出来,需要通过手动,在附加目录中包含这个文件的引用路径才可以最终在编译阶段,按照给出的地址进行索引再到编译。另外,还需要注意同名复用的情况。

        解决方法:在属性页中进行设置,需要进行修改的地方如下图所示:                            

        编译时出现缺少*.lib 又或*.dll的情况?

        没有在.sln(VS工程项目)中配置依赖库又或者附加目录,可以通过在工程项目的属性中添加附加库目录(这个主要是用来引用外部库的,即.lib文件),具体操作如下:             

        右击项目属性,找到‘附加库目录’                               

        添加目标目录的路径(注意区分x64,x32)。

        同时,在链接器中的高级选项中,也需要添加*.DLL相关的路径地址。

编译报错问题

        C2011 编译时出现“xx类型重定义”?

        原因:原因多是频繁引入、多次定义具有相同结构(同命名)的类或数据体。

        解决方法:在编写头文件等定义数据结构或方法的文件时,通常采用#pragmaonce、#include、#ifndef、#define、#endif(除第一条指令外,标准开发上采用#ifndef->#define->#include->#endif的顺序)来定义头文件标识,这样便可以防止某个头文件中的宏多次被定义。从而解决该问题。

        C2280 “xxxxx”尝试引用已删除的函数 报错?                    

        原因:这个报错原因实际上与取址访存有关,在遇到这类情况时,通常是将目标类或数据结构等转换成智能指针的形式来处理,这样可以避免出现在另外一处调用类、数据类型或取出数据时出现尝试引用已删除的函数。(想一想类中是不是有析构函数?)

        解决方法:通过代码std::make_shared<xxxx>(xxx)将目标类型转换成智能指针的形式。可以参照下列代码

  std::shared_ptr<XXXXX> phaseDlg = std::make_shared<XXXXXX>(this);

        C2039 xx不是QMetaTypeId<T>的成员?

         

        原因:没有注册对应的多元目标类型

        解决方法:用宏Q_DECLARE_METATYPE()来注册目标类型。

  Q_DECLARE_METATYPE(std::string);

        MSB6006 用CMake生成代码后出现”cmd.exe”已退出? 

        原因:

        I.项目目录中没有引用到头文件

        II.在拷贝头文件时是直接复制粘贴,而在工程项目文件(*.vcxproj)中并没有把文件路径给写入进去(也就是VS项目管理文件没有得到文件信息同步)

        III.CMakeLists中配置参数设置错误,添加的头文件路径有误

        V.若是Qt项目,一般是*.qrc资源文件中路径设置错误(要在qrc中配置好图标或其他资源的引用路径)

        解决方法:对于1-2因素造成的cmd 已退出可以通过在VS中右键点击“已有项”来加入代码;而对于因素3可以重新配置好正确的参数,然后执行CMake生成程序将项目目录进行重新构建;对于因素4则是则是要确认好在通过Qt 资源编辑工具将*.qrc文件中的资源路径给配置正确,也可以通过文本编辑工具将文件打开,在面板中设置好路径参数。

        LNK2019 LNK2001 无法解析的外部符号?

        原因:所引用的头文件及调用的函数所在项目未编译输出至最新(代码不一致,DLL链接不上)

        解决方法:找到所引用到的头文件/函数的所在项目,对其重新编译输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/172858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flask WTForms 表单插件的使用

在Web应用中&#xff0c;表单处理是一个基本而常见的任务。Python的WTForms库通过提供表单的结构、验证和渲染等功能&#xff0c;简化了表单的处理流程。与此同时&#xff0c;Flask的扩展Flask-WTF更进一步地整合了WTForms&#xff0c;为开发者提供了更便捷、灵活的表单处理方式…

【STM32单片机】简易计算器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用动态数码管模块、矩阵按键、蜂鸣器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管默认显示0&#xff0c;输入对应的操作数进行四则运…

Echarts 设备状态 甘特图

在做工厂智能化生产看板时&#xff0c;绝对会有设备状态看板&#xff0c;展示设备当天或者当前状态&#xff0c;设备状态数据一般是有mes 系统设备管理模块对设备信息进行采集&#xff0c;一般包括过站数据&#xff0c;设备当前状态&#xff0c;是否在线是否故障、检修、待生产…

【计算机网络笔记】多路访问控制(MAC)协议——轮转访问MAC协议

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

树状数组 / pbds解法 E2. Array Optimization by Deque

Problem - 1579E2 - Codeforces Array Optimization by Deque - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 树状数组解法 将 a i a_i ai​插入到队头&#xff0c;贡献为&#xff1a;原队列中所有比 a i a_i ai​小的数的数量将 a i a_i ai​插入到队尾&#xff0c;贡献为&a…

极客时间:使用本地小型语言模型运行网页浏览器应用程序。

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

二进制编辑器hexedit的安装及使用

Hexedit 同时以 ASCII 和十六进制显示文件 安装 终端输入hexedit回车&#xff0c;如果没安装&#xff0c;会提示让输入 sudo apt-get install hexedit 照着输入命令&#xff0c;安装。安装完成后&#xff0c;cd到一个有二进制文件的目录下&#xff0c;输入hexedit命令回车 再…

集线器-交换机-路由器

1.集线器(Hub) 集线器就是将网线集中到一起的机器&#xff0c;也就是多台主机和设备的连接器。集线器的主要功能是对接收到的信号进行同步整形放大&#xff0c;以扩大网络的传输距离&#xff0c;是中继器的一种形式&#xff0c;区别在于集线器能够提供多端口服务&#xff0c;也…

从0开始学习JavaScript--构建强大的JavaScript图片库

在现代Web开发中&#xff0c;图像是不可或缺的一部分&#xff0c;而构建一个强大的JavaScript图片库能够有效地管理、展示和操作图像&#xff0c;为用户提供更丰富的视觉体验。本文将深入探讨构建JavaScript图片库的实用技巧&#xff0c;并通过丰富的示例代码演示如何实现各种功…

透过对话聊天聊网络tcp三次握手四次挥手

序 说起来网络&#xff0c;就让我想起的就是一张图。我在网上可以为所欲为&#xff0c;反正你又不能顺着网线来打我。接下来我们来详细说一下网络到底是怎么连接的。 TCP三次打招呼 首先我会用男女生之间的聊天方式&#xff0c;来举一个例子。 从tcp三次握手来说&#xff0c;…

基于Loki + Promtail + Grafana 搭建 Nginx 日志监控

文章目录 引言第一部分&#xff1a;Loki 简介与安装1.1 Loki 简介1.2 Loki 安装1.2.1 下载 Loki1.2.2 安装 Loki 1.3 启动 Loki 第二部分&#xff1a;Promtail 简介与安装2.1 Promtail 简介2.2 Promtail 安装2.2.1 下载 Promtail2.2.2 安装 Promtail 2.3 启动 Promtail 第三部分…

231126 刷题日报

1. 高楼扔鸡蛋 O(N*logN) 2. 698. 划分为k个相等的子集 没做出来&#xff0c;和划分两个子集不同 3. 300. 最长递增子序列 LIS petencie sorting 没看懂&#xff0c;明天看吧 4. 518. 零钱兑换 II 完全背包问题&#xff1a;每个物品数量是无限的 注意&#xff1a;dp的定义…

使用不平衡数据集练习机器学习

一、介绍 在当今世界&#xff0c;机器学习和人工智能几乎被广泛应用于每个领域&#xff0c;以提高绩效和结果。但如果没有数据&#xff0c;它们还有用吗&#xff1f;答案是否定的。机器学习算法严重依赖我们提供给它们的数据。我们提供给算法的数据质量在很大程度上决定了机器学…

2023年第十六届山东省职业院校技能大赛中职组“网络安全”赛项竞赛正式试题

第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题 目录 一、竞赛时间 二、竞赛阶段 三、竞赛任务书内容 &#xff08;一&#xff09;拓扑图 &#xff08;二&#xff09;A模块基础设施设置/安全加固&#xff08;200分&#xff09; &#xff08;三&#xf…

Centos 7.9 Install Docker Insecure Registry

文章目录 1. 镜像存储规划2. 安装定制 docker3. 部署 registry4. 验证镜像仓库 1. 镜像存储规划 linux LVM /dev/sdb mount dir /data【linux LVM 磁盘挂载目录】 创建两个目录 一个 docker 数据存储目录 &#xff1a;/data/docker&#xff0c;默认一般为linux为 /var/lib/d…

boomYouth

周一&#xff1a; 1. action异步写法&#xff1a; <script setup> import sonCom1 from /components/sonCom1.vue import sonCom2 from /components/sonCom2.vue import {useCountStore} from /store/counter import {useChannelStore} from /store/channel const count…

1、nmap常用命令

文章目录 1. 主机存活探测2. 常见端口扫描、服务版本探测、服务器版本识别3. 全端口&#xff08;TCP/UDP&#xff09;扫描4. 最详细的端口扫描5. 三种TCP扫描方式&#xff08;1&#xff09;TCP connect 扫描&#xff08;2&#xff09;TCP SYN扫描&#xff08;3&#xff09;TCP …

PTA-7-55 判断指定字符串是否合法

题目&#xff1a; 输入一个字符串&#xff0c;判断指定字符串是否合法&#xff0c;要求字符串由7个字符组成&#xff0c;并且第一位必须是大写字母&#xff0c;2-4为必须是小写字母&#xff0c;后3为必须是数字字符&#xff0c;要求使用正则表达式来实现。 根据题目要求&#x…

防火墙命令行基础配置实验(H3C模拟器)

嘿&#xff0c;这里是目录&#xff01; ⭐ H3C模拟器资源链接1. 实验示意图2. 要求3. 当前配置3.1 PC配置3.2 FW配置&#xff08;防火墙&#xff09;[^7][^8]3.2.1 FW1配置3.2.2 FW2配置 3.3 R配置3.3.1 R1配置3.3.2 R2配置 3.4 SW配置3.4.1 SW1配置3.4.2 SW2配置3.4.3 SW3配置…

1.9 字符数组

1.9 字符数组 一、字符数组概述二、练习 一、字符数组概述 所谓字符数组&#xff0c;就是char类型的数组&#xff0c;比如 char a[]&#xff0c;是C语言中最常用的数组类型&#xff0c;先看一个程序 #include <stdio.h> #define MAXLINE 1000 //最大行长度限制 int get…