【问题标题】:Cannot remove special character from QGeoCoordinate无法从 QGeoCoordinate 中删除特殊字符
【发布时间】:2020-09-08 01:43:04
【问题描述】:

我正在使用 QGeoCoordinate::tostring(),我想删除特殊字符“°”。例如这是关于函数的返回值:“41° 4' 11.1\” N, 30° 33 ' 15.0\" W";,我可以删除所有特殊字符,但不能删除“°”。这是我的代码:

 QGeoCoordinate geo(41.0697, -30.5542);
    QString strGeo = geo.toString(QGeoCoordinate::DegreesMinutesSecondsWithHemisphere);
    strGeo .replace("°", "");

我也尝试过正则表达式,但没有。这是visual studio和windows平台。你有什么想法吗?

【问题讨论】:

  • ° 是一个特殊字符,根据源文件的编码可能会被误解。尝试 QString::fromLocal8bit("°") 或使用 UTF-8 作为编码

标签: windows visual-studio qt


【解决方案1】:

我找到了使用 c++ 的解决方案:

QString clearBytes(std::string str)
{
        QString res;

        for (int i = 0; i < str.size(); i++)
        {
            if ((str[i]) >= ',' && str[i] <= '.')
                res += QChar(str[i]);
            if (str[i] >= '0' && str[i] <= '9')
                res += QChar(str[i]);
            if (str[i] >= 'A' && str[i] <= 'Z')
                res += QChar(str[i]);
        }

        return res;
}

int main()
{

  QString strGeo = geo.toString(QGeoCoordinate::DegreesMinutesSecondsWithHemisphere);

  QString result=clearBytes(strGeo.toStdString());
  return 0;
}

我没有找到qt方式。我在使用isalpha()标准库时也遇到了运行时错误。

【讨论】:

    【解决方案2】:

    Degree sign 可以定义为 unicode 十进制 176。您可以使用 QChar 构造函数将 unicode 代码点作为整数并使用 QString::replace。

    strGeo.replace(QChar(176), "");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2016-01-23
      • 2016-10-26
      相关资源
      最近更新 更多