我正在尝试为存储数据的类创建更有用的调试消息。我的代码看起来像这样
#include <QAbstractTableModel>
#include <QDebug>
/**
* Model for storing data.
*/
class DataModel : public QAbstractTableModel {
// for debugging purposes
friend QDebug operator<< (QDebug d, const DataModel &model);
//other stuff
};
/**
* Overloading operator for debugging purposes
*/
QDebug operator<< (QDebug d, const DataModel &model) {
d << "Hello world!";
return d;
}我希望qDebug() << model会打印出"Hello world!“。但是,输出中总是有类似"QAbstractTableModel(0x1c7e520)“内容。
你知道出什么事了吗?
发布于 2010-04-21 02:57:32
玩弄这个问题一个小时后,我发现model是指向DataModel的指针,而我的运算符<<只接受引用。
发布于 2015-08-12 00:52:47
我知道这件事已经有很长时间了,但只是为了记录下来,并帮助其他最终有同样疑问的人,让qDebug() <<使用你自己的类打印"Hello World“或其他东西的最简单的方法是实现你的类到可打印类型的隐式转换,比如QString (这是QDebug很好的支持)。
class Foo {
public:
Foo() { }
operator QString() const { return <put your QString here>; }
};发布于 2012-11-10 17:31:30
在您的示例中,qDebug()打印变量的地址,这是未知类型的默认行为。
事实上,似乎有两件事你必须要注意:
这将为您提供:
QDebug operator<< (QDebug d, const DataModel &model) {
d << "Hello world!";
return d;
}
DataModel m;
qDebug() << "m" << m;或
QDebug operator<< (QDebug d, const DataModel &model);
DataModel m;
qDebug() << "m" << m;
QDebug operator<< (QDebug d, const DataModel &model) {
d << "Hello world!";
return d;
}我也经历了很艰难的经历...
https://stackoverflow.com/questions/2677577
复制相似问题