#pragma once #include "LlUtils_global.h" #include "Defines.h" // 关于上标下标的说明 // 主要是单位上标下标,后续可以考虑数值,比如 1e-10d等 // 处理方式: // (1) 直接在绘图中进行处理,比如坐标轴的刻度(对数坐标里面) // (2) 改为html代码,增加sub或sup布局方式,QLabel与QTextEdit有些许区别 // (3) 利用UnitCode编码来进行,通常针对数字来进行,个别情况下对字母,注意:需要查表 // 目前整体采用第(3)种方式来进行 class I_UTILSSHARED_EXPORT ZxSupSubHelper { public: ZxSupSubHelper(); ~ZxSupSubHelper(); // 对于富文本转换,显示为QLabel和QTextBox是有些区别的,故此处区分一下 // enum RichHtmlMode // { // RHM_Label = 0, // 0-QLabel直接调用 // RHM_TextEdit, // 1:QTextEdit直接调用 // RHM_Unknown // 其它(TODO) // }; /// @brief 检测是否含有需要富文本转换的内容,如果有,则转换 /// @param src 源文本,如 m^3/m^3 /// @param dest 编码结果文本,比如^转为上标 /// @param tag 判断表示,通常是^ 后续支持e /// @param super 变为上标还是下标,默认上标 /// @param sslen sub/sup 长度,如果为-1则自动按照数字来取,否则,按sslen取 /// @return true:是,且正确转换,false:其他 static bool checkRichText(QString src, QString& dest, \ QString tag = "^", bool super = true, \ int sslen = -1); /// @brief 把转换后的上下标字符串,再次进行调整,以能够以html的样式显示在QLabel中 /// @param src 源文本,如 m³/d /// @param dest 目标文本,如 m3/d /// @param super 变为上标还是下标,默认上标 /// @return true:是,且正确转换,false:其他 /// @note 权宜之计的说明,后续有时间再进行优化完善—— // 即:上述上标模式转换,大多数情况下没有问题,但是对于QLabel的显示出了问题,无法正常显示。 // 比如插入流量点对话框中,"10^4m^3/d",m^3可以正确显示,但是^4无法正确显示 // 经测试,应该是转换的码,不支持。(1,2,3,转为的0x00..,而其它转为的是0x20..) // 但是为了保持整体接口的统一(所有地方都能适用),所以针对QLabel,增加如下接口,以便把转换后的 // 上下标字符串,能够以html的样式显示在QLabel中。 // m³/d 变为:m3/d static bool convertRichText4Label(QString src, QString& dest, \ bool super = true); private: // 内部编码查找函数 static QString _getRichCodesOfStrs(QString s, bool super); static QString _getRichCodeOfChar(QChar ch, bool super); static QString _getCharOfPossibleRichCode(QChar ch, bool super); // 目前暂时支持14种字符上下标,后续根据需要可以进行扩展 // ss_ 标识:SupSub static const int ss_size = 14; static const int ss_chars[14]; static const int ss_digitsSup[14]; static const int ss_digitsSub[14]; };