2013-07-24 74 views
0

我有一個struct點如何輕鬆地將QString轉換爲點(x,y,z)?

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? 
} 

謝謝。

回答

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)來執行系統獨立的轉換。

+0

我對正則表達式不熟悉。 'QString(double)'''''km(1000)''的正則表達式是什麼?非常感謝! – user1899020

+0

這將是''km \\(([^)] +)\\)「'。 –

相關問題