qDebug() not showing const std::string&
10,183
Solution 1
qDebug()
does not know anything about std::string
but it works with const char*
. Appropriate operator you can find here. You can achieve this with data()
or with c_str()
which is better as Jiří Pospíšil
said.
For example:
const std::string& testName = "asdfqwer";
qDebug() << testName.data() << testName.c_str();
Aslo you can convert std::string
to QString
with QString::fromStdString.
Solution 2
If you need writing std::string to qDebug() often in your code, you can implement this function globally (for example in you main.cpp
):
#include <QDebug>
#include <string>
QDebug& operator<<(QDebug& out, const std::string& str)
{
out << QString::fromStdString(str);
return out;
}
int main()
{
std::string jau = "jau";
qDebug() << jau;
return 0;
}
Comments
-
goGud almost 2 years
I am trying to use some vector data's name with
struct
. I am trying to get see which name inqDebug()
To be more clear:
const std::string& testName = "asdfqwer"; qDebug() << testName;
It gives en error message in build:
Error: no match for 'operator<<' in 'qDebug()() << testName'
I don't have options to change
const std::string&
type. Could you please help me to solve this issue without changing type? -
johngull over 9 yearssame you can use convertion to the QString with the QString::fromStdString
-
goGud over 9 yearsAmazing.. I didn't know that behaviours of qDebug()
-
Jiří Pospíšil over 9 yearsIt'd be better to use
c_str()
instead ofdata()
as the latter is not required to be null-terminated (until C++11). -
Jablonski over 9 years@johngull Yes, you are right, but I thought that OP use here C++ only types, but I added this to answer, it correct and OP can choose what he wants.
-
Jablonski over 9 years@JiříPospíšil I added c_str() to my answer. Thank you.
-
johngull over 9 years@Chernobyl I think it is natural to use Qt types if you use qDebug. Impossible to use qDebug without using QtCore, so QString is available for him. Anyway, the main point here that convertion needed.
-
smac89 over 3 yearsThis makes a copy of the
QDebug
object. Shouldn't you be returning a reference instead?