QByteArray最好用中间变量存储临时变量

来源:互联网 发布:小程序请求服务器数据 编辑:程序博客网 时间:2024/06/03 11:54

最近Qt编程实践中,发现QByteArray的不可预料问题,不知道为啥。编程实践是:我用QClipBoard存储自定义结构体数据,实现进程间的数据传输。开始我是这么写代码的:


从QClipBoard读取自定义结构体数据的过程是:获取mimeData指针md--》获取指针md的data域ba,是QByteArray对象--》用ba初始化QDataStream流in--》用流in写入QVariant,最后QVariant调用value方法获取自定义的结构体值。

这个写法,把QByteArray对象作为了临时变量,在一个进程内部执行时,没有错误。但在跨进程执行时,获取到的自定义结构体值是空的。不知道为何。网上也没有人讲这个问题。不过,我在调试时,将中间变量都单独用变量表示了,意外地解决了这个问题。这么写:


用单独的变量转储QByteArray中间变量值,进程间的通信,自动地解决了,可以从剪切板获取到数据。虽然不知道所以然,但知其然也不错耶。

这个小问题,开始我百度没找到解决方法,窃以为可以作为原创写下来,顺便作为后续笔记查看复习。

此外,在QString转char*时,最好写个函数,用中间变量转储QString.data()得到的QByteArray对象,直接使用临时变量可能会在某些场景下有意外的错误。

以上涉及到的剪切板实现进程间通信,网上都查得到,就不多写了。