[PATCH] Fix UTF8 problems in the divelist

subsurface at henrik.synth.no subsurface at henrik.synth.no
Wed Apr 24 13:53:03 PDT 2013


From: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>

Non-ascii content in the divelist wasn't encoded properly.

Signed-off-by: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>
---

Ooops, use this instead.  The previous patch might lead to unexpected results [1].

Henrik

[1] http://www.qtforum.org/article/23762/qstring-to-char.html?s=f663f488b5f799a7ac564ce8800009d93cb54726#post84335


 qt-ui/models.cpp | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 40307d0..d123ec2 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -10,6 +10,11 @@
 
 extern struct tank_info tank_info[100];
 
+QString fixUtf8(QString str)
+{
+	return QString::fromUtf8(str.toAscii().data());
+}
+
 CylindersModel::CylindersModel(QObject* parent): QAbstractTableModel(parent)
 {
 }
@@ -374,7 +379,7 @@ QVariant DiveTripModel::data(const QModelIndex &index, int role) const
 				retVal = item->diveNumber();
 				break;
 			case DATE:
-				retVal = item->diveDateTime();
+				retVal = fixUtf8(item->diveDateTime());
 				break;
 			case DURATION:
 				retVal = item->diveDuration();
@@ -383,7 +388,7 @@ QVariant DiveTripModel::data(const QModelIndex &index, int role) const
 				retVal = item->diveDepth();
 				break;
 			case LOCATION:
-				retVal = item->diveLocation();
+				retVal = fixUtf8(item->diveLocation());
 				break;
 		}
 	}
@@ -393,7 +398,8 @@ QVariant DiveTripModel::data(const QModelIndex &index, int role) const
 
 QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int role) const
 {
-	QVariant ret;
+	QVariant converted;
+	QString ret;
 	if (orientation != Qt::Horizontal){
 		return ret;
 	}
@@ -407,7 +413,7 @@ QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int
 				ret = tr("Date");
 				break;
 			case RATING:
-				ret = UTF8_BLACKSTAR;
+				ret = QString(UTF8_BLACKSTAR);
 				break;
 			case DEPTH:
 				ret = tr("ft");
@@ -416,7 +422,7 @@ QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int
 				ret = tr("min");
 				break;
 			case TEMPERATURE:
-				ret = UTF8_DEGREE "F";
+				ret = QString(UTF8_DEGREE "F");
 				break;
 			case TOTALWEIGHT:
 				ret = tr("lbs");
@@ -428,7 +434,7 @@ QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int
 				ret = tr("Cyl");
 				break;
 			case NITROX:
-				ret = "O" UTF8_SUBSCRIPT_2 "%";
+				ret = QString("O" UTF8_SUBSCRIPT_2 "%");
 				break;
 			case SAC:
 				ret = tr("SAC");
@@ -443,8 +449,9 @@ QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int
 				ret = tr("Location");
 				break;
 		}
+		converted = fixUtf8(ret);
 	}
-	return ret;
+	return converted;
 }
 
 int DiveTripModel::rowCount(const QModelIndex &parent) const
-- 
1.8.1.3



More information about the subsurface mailing list