调试时直接显示QString的字符值(包含windows和linux)

在用Qt进行编程调试的时候,总是要查看Qt各类变量的值,遗憾的是,无论是windows的VisualStudio还是linux上的gdb,对Qt定义的数据类型等支持并不友好。例如,想要看到QString字符创的值,在windows上要在变量窗口点击好几层才能看到,而在linux,用gdb打印的信息根本无法读取。

在网上参考了很多方法,终于找到了比较完美的解决方案,但是网上的文档一般仅针对一个操作系统。但是调试Qt的跨平台程序,一般都是要在很多平台上调试,最常用的就是Windows和Linux了,现在就Windows和Linux操作系统上进行调试如何直接 显示QString的值进行分别说明。当然聪明的小伙伴们还可以举一反三,根据自己的需要实现其他Qt类型的显示,或者更改自定义的数据结构的显示。

Windows(测试环境 win7,Qt4, VisualStudi 2010)

打开VS的安装目录,找到Common7\Packages\Debugger下面的autoexp.dat文件,打开->搜索[Visualizer],在下面添加如下:
; Qt4
QString{
    preview         ([$e.d->data,su])
    stringview      ([$e.d->data,sub])
    children
    (
        #(
            d: $c.d,
            [size]: $c.d->size,
            [referenced]: $c.d->ref._q_value
        )
    )
}

保存后从新启动VS,再进行调试的时候,当鼠标移动到QString变量的时候,就可以直接显示字符串内容了。

Linux(测试环境:redhat 7.1)

在linux中可以使用gdb的扩展功能,用自定义宏命令的方式实现。宏定义如下:
define printqstring 
    printf "(QString)0x%x (length=%i): \"",&$arg0,$arg0.d->size 
    set $i=0 
    while $i < $arg0.d->size 
        set $c=$arg0.d->data[$i++] 
        if $c < 32 || $c > 127 
                printf "\\u0x%04x", $c 
        else 
                printf "%c", (char)$c 
        end 
    end 
    printf "\"\n" 
end 
将上述宏定义保存到家目录下的 .gdbinit文件中,每次启动gdb就能够自动加载了,非常友好方便。如图:





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux下,使用C++判断一个QString中是否包含某个字符串可以使用QString的contains()函数。该函数返回一个bool,如果QString包含指定的字符串,则返回true,否则返回false。下面是一个示例代码: ```cpp #include <iostream> #include <QString> int main() { QString str = "Hello, world!"; QString subStr = "world"; if (str.contains(subStr)) { std::cout << "The QString contains the specified substring." << std::endl; } else { std::cout << "The QString does not contain the specified substring." << std::endl; } return 0; } ``` 在上述代码中,我们创建了一个QString对象`str`,并将其初始化为"Hello, world!"。然后,我们创建了一个QString对象`subStr`,并将其初始化为"world"。接下来,我们使用`contains()`函数判断`str`中是否包含`subStr`,并根据返回输出相应的结果。 请注意,为了使用QString类,你需要在代码中包含`<QString>`头文件,并使用`using namespace std`指令来避免使用完全限定的名称。 #### 引用[.reference_title] - *1* [C++ string判断是否包含字符串](https://blog.csdn.net/weixin_64632836/article/details/130473965)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [QT常用字符串QString和QByteArray详细说明](https://blog.csdn.net/klp1358484518/article/details/127581776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值