You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Include/iBase/iUtils/ZxSupSubHelper.h

68 lines
3.2 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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, // 1QTextEdit直接调用
// 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 目标文本,如 <font>m<sup>3</sup>/d</font>
/// @param super 变为上标还是下标,默认上标
/// @return true且正确转换false其他
/// @note 权宜之计的说明,后续有时间再进行优化完善——
// 即上述上标模式转换大多数情况下没有问题但是对于QLabel的显示出了问题无法正常显示。
// 比如插入流量点对话框中,"10^4m^3/d"m^3可以正确显示但是^4无法正确显示
// 经测试,应该是转换的码,不支持。(12,3,转为的0x00..而其它转为的是0x20..)
// 但是为了保持整体接口的统一所有地方都能适用所以针对QLabel增加如下接口以便把转换后的
// 上下标字符串能够以html的样式显示在QLabel中。
// m³/d 变为:<font>m<sup>3</sup>/d</font>
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];
};