是否有可能重用 c++ QML 中的用户定义宏/函数或直接在 QML 中具有类似的定义
我有一个在 C++ 中定义的函数宏,如下所示,这里的好处是标识符 __PRETTY_FUNCTION__
自动添加到最终调用中,从而捕获原始调用者签名,我也需要这种情况我从 QML 调用最终函数而不手动添加调用者 prety_type ,我无法定义从 QML 调用的 Q_INVOKABE 但如果 invoKable 采用调用宏的规则,我将丢失 QML 调用者函数签名,我知道这应该是可能的,因为 splodg 库具有显示 QML/JS 函数名称的行为。
#define my_debug(msg,category) \
myns::logger->log_debug(msg, category, __PRETTY_FUNCTION__)
在 C++ 中,
namespace myns{
class logger {
void log_debug(const char* msg , CATEGORY category , const char* caller_sign = ""){
...
...
}
}
}
I have a function macro defined in c++ like below, the benefit here is that the identifier __PRETTY_FUNCTION__
, is automatically added to the final call thus original caller signature is captured, I need this also to be the case when I call my final function from QML without manually adding caller prety_type , I cant define a Q_INVOKABE called from QML but if the invoKable takes the rule of invoking the macro I would lost QML caller function signature , I know it should be possible because splodg library has this behavior of showing QML/JS function name .
#define my_debug(msg,category) \
myns::logger->log_debug(msg, category, __PRETTY_FUNCTION__)
in c++ ,
namespace myns{
class logger {
void log_debug(const char* msg , CATEGORY category , const char* caller_sign = ""){
...
...
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
无法直接从 QML 调用宏。那是不可能的。但听起来这不是你真正的问题。听起来您对在调试输出中获取行/函数名称更感兴趣。您可以使用 qInstallMessageHandler 轻松完成此操作。
首先定义您的消息处理函数。 Qt 提供了一个上下文对象,其中包含您想要的所有行/函数信息。
然后告诉 Qt 使用该函数来处理您的消息,如下所示:
现在,当您使用 qDebug() 或 console.log() 时,它应该调用您的输出函数,并且您应该看到行号和函数名称。
There is no way to directly call your macro from QML. That is just not possible. But it sounds like that's not real your question. It sounds like you're more interested in just getting the line/function names in your debug output. You can do that easily with qInstallMessageHandler.
Start by defining your message handling function. Qt provides a context object that has all the line/function info you want.
Then tell Qt to use that function to handle your messages, like this:
Now when you use qDebug() or console.log(), it should call your output function and you should see the line numbers and function names.