这是qt文档中提供的qDebug()的替代语法。
qDebug()<< “刷子:”<< myQBrush<< “其他价值:”<< I;
什么是“<<”运营商在这做什么?他们是否将字符串放入函数中?它是否允许使用c ++语法,或者只能在Qt中使用(因为文档也讨论了QtDebugMsg)
答案 0 :(得分:4)
使用此语法(qDebug
带空大括号)returns QDebug
对象具有operator<<
overloaded,并且每次操作符完成后返回引用QDebug
对象,以便链接操作。
qDebug
是一个宏,定义为:
QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
因此,如果你写qDebug
它会被上面的行替换,但QMessageLogger::debug
是一个函数,而不是一个字段,所以你不能以这种方式访问它。显然,使用函数的正确方法是向其添加()
。所以我们写qDebug()
并在宏扩展后得到:
QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug()
这意味着:创建QMessageLogger
类型的临时对象,并在其上调用debug
方法。什么是debug
方法?这是:QDebug debug() const;
。因此,qDebug()
行为我们提供了QDebug
类型的临时对象。
然后在这个临时对象上我们调用operator<<
(将使用哪一个取决于参数类型)。
答案 1 :(得分:0)
这是一个流操作员。
输出流使用插入(&lt;&lt;&lt;)运算符作为标准类型。你也可以重载&lt;&lt;你自己的班级的操作员。
以下是MSDN文档: https://msdn.microsoft.com/en-us/library/1z2f6c2k.aspx