I think you need the same function as it is used in the read method which is implemented in the Client tutorial. This is the code I use for converting UaDataValue to String (the variable values is from type UaDataValues, that's why i use values):
qDebug("Read succeeded for node %s with value %s", UaNodeId(readValues.NodeId).toXmlString().toUtf8(),
UaVariant(values.Value).toString().toUtf8());
I have tried that and it doesn't work. The difference is that values.Value returns OpcUa_Variant type, while dataValue.value() returns const OpcUa_Variant* type, so I think that's the main problem.
I have tried that way but it doesn't works. The difference is that you are using UaDataValues, and values.Value() returns an OpcUa_Variant. In my case, I am using UaDataValue, and value.value() returns OpcUa_Variant*.