• 6002阅读
  • 5回复

[提问]请教大家一个基础的问题。 [复制链接]

上一主题 下一主题
离线ffii4455
 

只看楼主 倒序阅读 楼主  发表于: 2012-05-19
最近写一个TCP的小软件。越写的才越觉得自己的基础真是薄弱啊。


问题是这样的:
继承了QTcpSocket-》myTcpSocket.
myTcpSocket就实现了一个发射信号的功能 readReadySocket(QTcpSocket*). 这样意味着当socket有readReady时,同时也能发射嵌套字。以便于我区分客户端。
但是,我是这样:tcpSocket = (myTcpSocket*)tcpServer->nextPendingConnection(); 获取新建连接的嵌套字,之所以进行了类型转换是因为nextPendingConnection()返回的类型是QTcpSocket*(是myTcpSocket*的父类,如果不转换会报错。)

现在功能是一切正常的。
我的疑问是这样做是否符合常理? 我对QT指针转换那里实在不太了解。
没有更标准的做法?总觉得这样怪怪的。


希望大家不吝赐教,这里先谢过了~~~
离线roywillow

只看该作者 1楼 发表于: 2012-05-19
如果是QObject的子类进行父类到子类的转换的话,应该可以用qobject_cast<子类*>(父类类型的指针)
就像在槽中把sender()转换成对应的发送者的类一样
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线ffii4455

只看该作者 2楼 发表于: 2012-05-19
回 1楼(roywillow) 的帖子
你的意思是
tcpSocket = qobject_cast<myTcpSocket *>(tcpServer->nextPendingConnection());

不过好像转换失败啊~~
离线roywillow

只看该作者 3楼 发表于: 2012-05-19
回 2楼(ffii4455) 的帖子

其实这个宏我用的也不多……适用范围还不是很清楚
你看一下文档?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线XChinux

只看该作者 4楼 发表于: 2012-05-19
nextPendingConnection返回的就是QTcpSocket类型而不是你自定义的那个类,类型转换不会成功的。正常的做法是从QTcpServer派生一个类重新实现nextPendingConnection方法
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ffii4455

只看该作者 5楼 发表于: 2012-05-19
回 4楼(XChinux) 的帖子
感谢斑竹的提示~~
快速回复
限100 字节
 
上一个 下一个