• 6149阅读
  • 6回复

[提问]如何通过界面管理类中的操作,例如pushbutton的click()来改变自定义线程中的内容? [复制链接]

上一主题 下一主题
离线三少爷
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-21
各位大牛,帮在下看看哈~~
是这样的:本人定义了一个继承于QTcpServer类的server,在incomingConnection()中,new 自定义的线程MyThread,然后在MyThread的run()中定义继承于QTcpSocket的clientsocket对象,然后clientsocket对象将给客户端发送和接收各种信息。我可以使用signal和slot机制,通过服务器接收到的信息的不同来改变mainWindow界面中的现实,但是,如何通过界面操作来改变clientsocket将发送给客户端的内容呢??


例如,mainWindow中的一个button,触发clicked()信号,之希望改变一个客户端socket相连的线程中的内容,还是用信号和槽机制吗?那怎么判断应该连接哪个线程的信号?用一个QList把线程都append在QList里面,然后connect(this,signal,thread_list,slot)这样?其中i是我自己传入的每一个线程的编号。我试了下,不行~~那怎么办呢?求解决!!!先谢谢了~~
离线jdwx

只看该作者 1楼 发表于: 2012-05-21
信号和槽可以跨线程,和平时用法一样。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线三少爷
只看该作者 2楼 发表于: 2012-05-23
回 1楼(jdwx) 的帖子
我知道怎么从现场中修改界面,通过信号和槽~但是从界面发出的信号,怎么选择他应该改变的线程呢?(每个连接的客户端都有一个线程)。。。谢谢哈
离线三少爷
只看该作者 3楼 发表于: 2012-05-23
回 1楼(jdwx) 的帖子
我使用我之前提到的,将每一个线程添加到一个QList中,然后对QList这个线程连接信号和槽,这样不行~~至少我试了不行~~但是我觉得,虽然每一个线程都有这个槽,但是我的界面发的信号值改变其中的一个,应该是这样~~~诶,其实我这是第一次用QT做完整的项目,望不吝赐教哈~抱爪抱爪^_^
离线jdwx

只看该作者 4楼 发表于: 2012-05-24
回 2楼(三少爷) 的帖子
根据你的说法,既然每个客户端都有一个线程,怎么选择应该改变的那个线程,这完全看你的设计了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 5楼 发表于: 2012-05-24
回 3楼(三少爷) 的帖子
每个线程类都一样连接信号和槽,不知道应该怎么区分?
QList内存放线程类指针,界面发出的信号增加一个参数(活动线程的指针),线程内进行对比,不是自己就返回。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线三少爷
只看该作者 6楼 发表于: 2012-05-24
回 5楼(jdwx) 的帖子
我之前就是这么写的代码,但是不能达到预期的效果。而且服务器GUI上面的按钮,点击一下后,引发的信号会发送多次~很诡异。。。我再试试,如果还是不行再问楼上哈~
快速回复
限100 字节
 
上一个 下一个