读写XML文件

【Qt QDomComment读写Xml文件(含示例源码) - CSDN App】http://t.csdnimg.cn/huoCn
【QT实现XML文件的写入和读取 - CSDN App】http://t.csdnimg.cn/dpny8

读写CSV文件

#include "基本的一些头文件"   
 ifstream inFile("data.csv",ios::in);
        string lineStr;
        vector<vector<string>> strArray;
        int count=0;
        // bool secondNodeFoun =true;
        bool firstNoneFound= true;
        bool lastNoneFound= true;
        string element2 = "0";
        vector<string> Before_lineArray;
        while (getline(inFile,lineStr))
        {
            count++;
            if(count>5)
            {
                // cout<<lineStr<<endl;
                stringstream ss(lineStr);
                string str;
                vector<string> lineArray;

                int byRow = 0;
                // if(secondNodeFoun!= true)
                // {

                // }
                while(getline(ss,str,','))
                {
                    byRow ++;
                    if(byRow ==2 && str != element2 && firstNoneFound==true)
                    {
                        cout<<lineArray.at(0)<<endl;
                        firstNoneFound= false;
                    }
                    lineArray.push_back(str);
                }
                if(count==6)
                {
                    Before_lineArray.push_back(lineArray.at(0));
                    Before_lineArray.push_back(lineArray.at(1));
                    Before_lineArray.push_back(lineArray.at(2));
                }
                if(lineArray.at(1) == element2 &&firstNoneFound==false&&lastNoneFound==true)
                {
                    cout<<Before_lineArray.at(0)<<endl;
                    lastNoneFound=false;//保证只输出一次的bool
                }else
                {
                    Before_lineArray.clear();
                    Before_lineArray.push_back(lineArray.at(0));
                    Before_lineArray.push_back(lineArray.at(1));
                    Before_lineArray.push_back(lineArray.at(2));
                    // Before_lineArray.at(0)=lineArray.at(0);
                    // Before_lineArray.at(1)=lineArray.at(1);
                    // Before_lineArray.
}
                // secondNodeFoun= false;
                strArray.push_back(lineArray);

            }
        }
        getchar();
        return 0;

安装新组件

在Qt安装后,如果需要添加或更新组件,可以使用Qt Maintenance Tool进行管理。以下是具体的步骤:
首先,在Qt的安装路径下找到MaintenanceTool.exe,双击打开它。如果使用的是Qt 5.10版本,打开后界面如下图所示。
直接选择“Skip”,进入下一步。然后依次按照界面上的提示步骤进行操作。
在弹出的界面中选择“存储库”选项卡,选择“临时存储库”,点击“添加”,然后输入https://download.qt.io/online/qtsdkrepository/windows_x86/root/qt/,点击“测试”。测试成功后,点击“OK”。
此时再次回到第一个页面,点击“Skip”,选择“添加或移除组件”,系统会提示正在准备下载,等待完成后就可以添加或移除组件了。
按照这些步骤,就可以通过Qt Maintenance Tool来添加或更新Qt安装的组件了。这种方法简单方便,适用于需要自定义Qt安装组件的用户。

断点调试

调试不跳入语句:

常量赋值语句;条件语句;qdebug语句

跳入:
return 语句;指针分配内存/赋值语句

条件调试

在调试器中设置 edit breakpoint properties (编辑断点属性)的Condition(条件)和Ignore count(忽略次数),核心是让断点满足指定条件/跳过指定次数后才触发,不同调试器(GDB/VS/Qt Creator/CLion)操作逻辑一致,仅界面/命令行写法不同,以下分图形化调试器(通用)和GDB命令行两类说明,覆盖开发中最常用场景。

图形化调试器(Qt Creator/VS/CLion/VS Code)

以Qt Creator为核心,其他工具操作完全同源,步骤如下:
1. 打开断点属性窗口
- 方式1:在代码行断点处右键 → 选择Edit Breakpoint/编辑断点属性;
- 方式2:打开调试面板的Breakpoints列表,双击目标断点,或右键选择Properties。

2. 设置Condition(条件)
- 输入框标注: Condition / 条件表达式 / Break when ;
- 要求:输入可执行的布尔表达式(调试器会在断点处计算,结果为 true 时触发断点);
- 示例:
- 变量判定: i == 100 (变量i等于100时触发)、 str != nullptr (指针非空时触发);
- 表达式判定: arr[0] > 50 (数组第一个元素大于50时触发)、 func() == true (函数返回真时触发);
- 关键:表达式需符合当前编程语言语法(C++/C/Java等),变量必须是断点处可见的作用域变量(局部/全局)。
 
3. 设置Ignore count(忽略次数)
- 输入框标注: Ignore count / 忽略次数 / Skip ;
- 要求:输入非负整数(调试器会跳过前N次断点命中,第N+1次才触发);
- 示例:
- 输入 0 :不忽略,每次命中都触发(默认值);
- 输入 99 :前99次执行到断点处直接跳过,第100次触发;
- 适用场景:循环中无需逐次调试,直接定位到指定循环次数。
 
4. 生效:点击OK/应用,调试时自动按规则触发断点。

GDB命令行(Linux/嵌入式调试,无图形化界面)

GDB中通过 break 创建断点,或 edit breakpoints / b + condition / ignore 命令修改属性,核心命令如下(断点编号可通过 info breakpoints 查看,默认第一个断点编号为 1 ):
1. 创建断点时直接设置条件+忽略次数
gdb   
# 格式:break 行号/函数名 if 条件 ; ignore 断点编号 忽略次数
break main.cpp:50 if i==100 ; ignore 1 99  # 50行断点,i=100且忽略前99次触发
 2. 编辑已有断点的属性(对应edit breakpoint properties)
 gdb   
info breakpoints  # 查看所有断点,获取目标断点编号(如num=1)
condition 1 i==100  # 给编号1的断点设置条件:i==100
ignore 1 99         # 给编号1的断点设置忽略次数:99次
 3. 清除条件/忽略次数
gdb   
condition 1  # 清除编号1断点的所有条件
ignore 1 0   # 清除忽略次数(设为0即不忽略)

[C++]慎用一键替换

NULL直接替换nullptr
容易把原有的nullptr换成nullptrptr
NULL;换成nullptr;
NULL 换成nullptr ,接下来将记录一些QT常见的错误。

[Q1]fatal error: no input files 

在 Qt 5.12.7 编译时遇到  -1: error: fatal error: no input files  报错,通常不是指真的没有源文件,而是  .pro  或  .pri  工程文件的语法出现了小问题。

最常见的原因是:工程文件中出现了连续的两个反斜杠  \\ 。

[Q2]macro names must be identifiers

比较正确与错误的编译命令行。终端编译命令多了 -较正确与错误的编译命令行。终端编译命令多了 -DDEFINES -D+=,导致编译错误。
下面的DEFINES +=QT_NO_QDEBUG被识别为三个宏了。
 -D+=,导致编译错误。
下面的DEFINES +=QT_NO_QDEBUG被识别为三个宏了。

由于DEFINES += 前面一行没有接空行,自然就跟着/后,被识别为宏了。

[S2]macro names must be identifiers

第一步找到环境变量 open Terminal按钮
cd .pro所在路径

第二步:复制编译命令
1. 在 Qt Creator 的 编译输出 (Compile Output) 面板中,找到报错那一行对应的完整  g++  命令。
- 它通常以  g++ -c -fno-keep-inline-dlexport -O2 ...  开头。
2. 完整复制这一行命令(从  g++  开始,到最后一个  .cpp  文件结束)。

第三步:在终端执行与调试
1. 将复制的命令粘贴到刚才准备好的 CMD 终端中,先不要回车。
2. 简化命令(核心步骤):
为了快速定位问题,我们需要把命令行中所有的宏定义(-D 参数) 暂时删除。
- 找到所有形如  -DXXXX=XXXX  的部分,全部删除。
- 例如,删除  -D_UNICODE -DQT_CORE_LIB ...  这一整段。
3. 执行简化后的命令:
按下回车。此时应该能编译通过(如果不通过,说明是代码本身或路径问题,与宏无关)。
4. 二分法恢复宏定义:
- 将刚才删除的  -D  参数分成两部分。
- 先把第一部分粘贴回命令行,执行。
- 如果报错:问题在这一部分,继续拆分。
- 如果不报错:问题在另一部分,换另一部分测试。
- 重复此过程,直到找到单独哪一个  -D  参数导致了  macro names must be identifiers  错误。

[Q3]No rule to make target needed by 'debug/main.o

项目里的绝对路径没取消
pro文件里面的TARGET路径设置找不到。

[Q4]invaild new-expression of abstract class type

virtual顶层有 没有实现的函数。

[Q5]not plugin

QT 5.12.7 里面的 Mingw73_64里面的plugins放在bin同级目录
再把bin里面的Items.拷贝到大系统的bin里面。

[Q6]rc.exe

无法运行rc.exe,核心是找不到、路径错、SDK/VS组件缺失、权限/拦截。以下是Windows下(尤其Qt+MSVC)的快速修复步骤,按优先级执行:
1.快速定位rc.exe
- 常见路径:C:\Program Files (x86)\Windows Kits\10\bin\10.0.xxxx.0\x86/x64;C:\Program Files (x86)\Microsoft Visual Studio\20xx\Community\bin
1. 用VS开发者命令提示符(优先):打开“x86/x64 Native Tools Command Prompt for VS 20xx”,自动配环境变量,再编译或启动Qt Creator
2. 检查并安装Windows SDK:VS Installer→修改→勾选对应Windows SDK版本;查看项目属性→配置属性→常规→Windows SDK版本,确保本地已装
3. 临时配置环境变量(命令行):
bash   
# 示例(替换为你的路径)
set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64;%PATH%
set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um;%INCLUDE%

【编译器选错了,Select MinGW64】

[Q7]Qmap报错解决:添加MyData() = default;

Qmap报错解决:添加MyData() = default;
这种使用成员初始化列表的构造函数写法是 C++ 的标准用法,完全适配  QMap<int, YourClass>  的创建需求,只需保证类提供默认构造函数(或显式禁用后仅用带参构造插入元素)。
完整可运行代码示例

#include <QMap>
#include <QString>
#include <QDebug>

class MyData {
public:
    // 成员变量
    QString A;
    QString B;

    // 1. 带参构造函数(成员初始化列表方式)
    MyData(const QString& a, const QString& b) : A(a), B(b) {}

    // 2. 必须显式声明默认构造函数(否则 QMap 用 [] 时会报错)
    MyData() = default;
};

int main() {
    // 直接创建 QMap 对象
    QMap<int, MyData> dataMap;

    // 方式1:用 insert 插入带参构造的对象
    dataMap.insert(1, MyData("key1_valA", "key1_valB"));
    dataMap.insert(2, MyData("key2_valA", "key2_valB"));

    // 方式2:用 [] 赋值(依赖默认构造函数)
    dataMap[3] = MyData("key3_valA", "key3_valB");

    // 遍历输出
    for (auto it = dataMap.begin(); it != dataMap.end(); ++it) {
        qDebug() << "Key:" << it.key()
                 << " A:" << it.value().A
                 << " B:" << it.value().B;
    }

    return 0;
}


1. 默认构造函数的必要性
- 若使用  map[key] = value  语法,必须提供默认构造函数( = default  或手动写空实现)。
- 若只使用  insert  插入元素,可以禁用默认构造函数( MyData() = delete; ),避免无意义的空对象创建。

[Q8]QT安装错误

windows环境下报错:this application failed to start because  no Qt platform plugin could be initialized. Reinstalling the application may fix this problem
QT需要安装在C盘(安到其他盘,需配置环境变量,较为麻烦)
1.QT都是用的同一个安装包
2.选的满配
3.安装系统盘/其他磁盘的区别(这个就是问题所在)
这个错误的核心原因是Windows 无法找到 Qt 平台插件(如  qwindows.dll ),或插件依赖的库缺失。以下是可直接执行的解决步骤:
1. 确认插件路径并配置环境变量
找到 Qt 安装目录下的  plugins/platforms  文件夹(例如  D:\Qt\5.15.2\msvc2019_64\plugins\platforms ),将其路径添加到系统环境变量  QT_QPA_PLATFORM_PLUGIN_PATH  中。
2. 复制插件到程序运行目录
将  platforms  文件夹完整复制到你的 Qt 程序可执行文件( .exe )所在的同级目录下,确保目录结构为  程序目录\platforms\qwindows.dll 。
3. 补齐依赖的运行库
- 使用 Qt 自带的  windeployqt.exe  工具自动拷贝依赖库,命令行执行:
bash   
windeployqt.exe 你的程序路径\你的程序.exe
- 若仍缺失库,可使用  Dependency Walker  工具打开  .exe ,排查并补充缺失的  Qt5Core.dll 、 Qt5Gui.dll  等文件。
4. 检查编译器架构匹配
确保编译程序的 Qt 版本架构(32位/64位)与 Windows 系统架构一致,且编译时使用的编译器(如 MSVC、MinGW)与运行库匹配。

[Q9]系统设置导致报错

[win设置环境变量]
关于
设置高级系统配置
设置环境变量路径:
./osgLibrary/lib
./osgLibrary/bin
[QT设置环境变量]
QT内部环境变量设置+项目+构建环境
[统一编译时间]本地时间设置不对,与qt自动获取的

Office休息时间

Word图/表/序号域代码

🧩 方法三:SEQ域(跨表统一编号,可加前缀)
1. 首单元格按Ctrl+F9插入花括号,输入: SEQ 表编号 \* ARABIC ;
2. 按F9更新显示为1;
3. 复制到其他行,按F9统一更新;
4. 加前缀可写: 表-{ SEQ 表编号 \* ARABIC } 。

Excel休息

=CONCATENATE(MID(A5,1,LEN(A5)-1),"-1")
将字符串最后一个换位-1

如果这篇文章对你有帮助,别忘了点个关注,我会持续分享更多开发避坑与实战干货,下次更新你就能第一时间看到啦~

 

更多推荐