• 8935阅读
  • 6回复

信号与槽传2维数组参数时,数组指针发生偏移!!! [复制链接]

上一主题 下一主题
离线kofpk
 
只看楼主 正序阅读 楼主  发表于: 2009-04-08
我发现了一个很奇怪的问题!!!

我用信号与槽机制传递double[5][3],接收时发现第一个数组参数指针偏移了3个double字节,第二个数组参数更奇怪,我都不懂怎么形容了(第二个数组参数的我没贴出贴图)。

截图为信号与槽的声明,槽函数体,信号的连接、发送,接收的结果。

我应该怎么传递多维数组参数呢????

小图 | 大图 图片

  • 声明
  • 信号的连接、发送
  • 函数体1
  • 结果1
  • 函数体2
  • 结果2
离线cpq37
只看该作者 6楼 发表于: 2009-04-10
引用第5楼weizhy于2009-04-10 16:27发表的  :
qt从根本设计上是采用面向对象思想的,无论你用这个方式来做什么,都是非常危险而不易维护的,建议:
1、采用一个对象MyObject来装载你的数据,而后用signal-slot传递该对象
2、使用qt提供的集合类,如QList,QVector,QMap,QHash等,而不是使用二维数组,对二维数组的下标操作不予限制是非常危险的
在信号与槽的链接中从根本上就不应该关心参数的具体内容,也不应该有关心的责任,所以说你这种使用qt的方式是自己给自己造了非常多的麻烦,十分不值得提倡
同时如果采用这种方式,随着代码功能的增加和改动,代码的维护工作将变成一种灾难,试想一下如果二维数组的下标范围发生变化,或者说类型发生变化你必须将所有对下标的控制(此时这种控制散落在很多个处理槽中),而其中若有一个没有进行合适的更动,都将造成实现的失败
.......
的确是这样,不过有时候为了局部灵活性,也会对局部数据不进行封装。而且数组和二维数组也有它的优越性,比如对数据直接进行矩阵处理。不过有经验的人都会使用STL来处理,毕竟Qt提供的容器有限
离线weizhy
只看该作者 5楼 发表于: 2009-04-10
qt从根本设计上是采用面向对象思想的,无论你用这个方式来做什么,都是非常危险而不易维护的,建议:
1、采用一个对象MyObject来装载你的数据,而后用signal-slot传递该对象
2、使用qt提供的集合类,如QList,QVector,QMap,QHash等,而不是使用二维数组,对二维数组的下标操作不予限制是非常危险的
在信号与槽的链接中从根本上就不应该关心参数的具体内容,也不应该有关心的责任,所以说你这种使用qt的方式是自己给自己造了非常多的麻烦,十分不值得提倡
同时如果采用这种方式,随着代码功能的增加和改动,代码的维护工作将变成一种灾难,试想一下如果二维数组的下标范围发生变化,或者说类型发生变化你必须将所有对下标的控制(此时这种控制散落在很多个处理槽中),而其中若有一个没有进行合适的更动,都将造成实现的失败
这些事情对于一个负责任的开发者都应该积极的予以考虑
离线kofpk
只看该作者 4楼 发表于: 2009-04-10
问题解决了!
传double*
槽里用double[i*3+j]的方式递增指针。
但是为什么每次递增3个字节呢???

我好像把问题发错地方了,麻烦版主把本贴放到正确的地方去。
离线kofpk
只看该作者 3楼 发表于: 2009-04-10
用指针怎么代替呢???
离线cpq37
只看该作者 2楼 发表于: 2009-04-09
Qt的BUG,它的发送信号函数对指针进行了强制转化const_cast,然后错误就出现了
你可以用指针代替数组试试。
我最近正读到相关常量强制转换的书籍,然后想到QT经常用到强制转换如:const_cast,static_cast。我就想坏了,Qt会出现很多隐患。没想到被兄弟你遇上了,你的运气真是好啊,可以去买彩票了
离线kofpk
只看该作者 1楼 发表于: 2009-04-09
有人知道怎么使用信号与槽机制传递2维数组吗???
快速回复
限100 字节
 
上一个 下一个