重载qdebug输出错误,只能输出十六进制地址
时间: 2024-01-08 12:01:52 浏览: 69
出现这种情况可能是因为重载的QDebug操作符没有正确处理传入的类型。
在重载QDebug的操作符时,需要根据传入的类型进行不同的处理。如果传入的类型是一个对象的指针,那么需要使用`qPrintable()`函数将其转换为一个字符串输出。
下面是一个示例代码:
```c++
#include <QDebug>
class MyClass {
public:
MyClass(int value) : m_value(value) {}
int value() const { return m_value; }
private:
int m_value;
};
QDebug operator<<(QDebug dbg, const MyClass *obj)
{
if (!obj) {
dbg << "MyClass(0x0)";
} else {
dbg << "MyClass(" << obj->value() << ")";
}
return dbg;
}
```
这个函数将MyClass类型的指针转换为一个字符串输出,并将输出的数据标记为MyClass类型。
使用示例:
```c++
int main()
{
MyClass *obj = new MyClass(42);
qDebug() << obj;
delete obj;
return 0;
}
```
输出结果:
```
MyClass(42)
```
可以看到,输出的是MyClass类型的值,而不是十六进制地址。
阅读全文