0

我有一个结构点

struct Point
{
    double x;
    double y;
    double z;
}

并想将其转换为 QString “(x 的值,y 的值,z 的值)”并将其转换回来?有什么简单的方法吗?我想出的前向转换是

QString PointToString( const Point& pt )
{
     return QString("(%1, %2, %3)").arg(pt.x).arg(pt.y).arg(pt.z);
}

而且我无法弄清楚如何将其转换回来。

Point StringToPoint( const QString& s )
{
     // How?
}

谢谢。

4

1 回答 1

2

使用正则表达式:

QString s = "(2, 5.3, 1e8)";
QRegExp regexp("\\(([^,]+), ([^,]+), ([^)]+)\\)");
if (regexp.exactMatch(s)) {
  double x = regexp.capturedTexts()[1].toDouble();
  double y = regexp.capturedTexts()[2].toDouble();
  double z = regexp.capturedTexts()[3].toDouble();
  qDebug() << x << y << z;
}

输出:2 5.3 1e+08

请注意,arg在具有某些语言环境的系统上,可能会生成带有逗号分隔符的数字表示(例如“3,14”)。解析这种表示将是有问题的。所以你应该使用QLocale::c().toString(number)来执行系统无关的转换。

于 2013-07-24T20:36:08.393 回答