我正在尝试为存储数据的类创建更有用的调试消息。我的代码看起来像这样
#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>; }
};发布于 2017-05-09 19:49:56
您只实现了引用的<<运算符。如果你的model变量是一个指针,它将使用另一个实现(不是你的)。
要使用您的实现,您可以执行以下操作:
qDebug() << *model顺便说一下,实现QDebug operator<<(QDebug dbg, const T &data)重载的正确方法是使用QDebugStateSaver类:
QDebug operator<<(QDebug dbg, const QDataflowModelOutlet &outlet)
{
QDebugStateSaver stateSaver(dbg);
dbg.nospace() << ...;
return dbg;
}这样,在退出功能时,设置(即是否在打印之间插入空格)将被正确恢复。
https://stackoverflow.com/questions/2677577
复制相似问题