• 6258阅读
  • 8回复

[提问]自定义信号与槽问题,请指教下 [复制链接]

上一主题 下一主题
离线1048797679
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-27
如题,这个问题困惑了我1天了,不明白当中出什么问题了。
先贴代码:
TcpServer类:(一个窗口界面

back_stage类:(另一个窗口界面)

OrderDishes类:(又一窗口界面)

server类:(server是一个TCP服务器)

以上就是本文自定义的一些信号与槽函数,和他们所属的类。
问题是
前两个connect 可以正常连接信号进行触发。
后两个connect则不正常了。
还请各位帮忙看看。谢谢。

离线abcdlcq

只看该作者 1楼 发表于: 2011-07-27
server的元对象?
离线1048797679
只看该作者 2楼 发表于: 2011-07-27
回 1楼(abcdlcq) 的帖子

是这?
离线1048797679
只看该作者 3楼 发表于: 2011-07-27
怎么没有达人帮忙看看呢。。。
离线tanius

只看该作者 4楼 发表于: 2011-07-28
发射信号的实现时的代码呢?
emit的那行

不正常是什么意思?

不能接收信号,还是接收信号异常?
离线1048797679
只看该作者 5楼 发表于: 2011-07-28
回 4楼(tanius) 的帖子
QSqlQuery que;
    while(query.next())
    {
        dish_id = query.value(0).toString();
        dish_name = query.value(1).toString();
        que.exec(tr("select class_name from class_dish where class_id = '%1'").arg(query.value(2).toString()));
        que.next();
        dish_class = que.value(0).toString();
        dish_price = query.value(3).toDouble();
        dish_info = query.value(4).toString();
        dish_image = query.value(5).toString();
        emit sendClient_msgs(dish_id,dish_name,dish_class,dish_price,dish_image,dish_info);  
}
这个是其中一个信号

还想请问下,如果我在A类中创建了B类的对象,然后又在B类中新建一个A类的对象,这会不会导致这种情况的发生?
我是一菜鸟。
离线1048797679
只看该作者 6楼 发表于: 2011-07-28
A,B,C这三个类,
从A类对象中定义一个B类对象,再在B类对象中定义一个A类对象,
在B类对象中连接A类的信号,触发C类对象的槽函数。
这个一直调试不成功。。不知道为什么。
如果A,B类不相互包含,则此信号与槽能够连上。。。
咳。。郁闷了2天了。。

都没达人帮忙看看么
离线1048797679
只看该作者 7楼 发表于: 2011-07-28
引用第6楼1048797679于2011-07-28 21:23发表的  :
A,B,C这三个类,
从A类对象中定义一个B类对象,再在B类对象中定义一个A类对象,
在B类对象中连接A类的信号,触发C类对象的槽函数。
这个一直调试不成功。。不知道为什么。
如果A,B类不相互包含,则此信号与槽能够连上。。。
.......


自己将代码简化了下。。。以下接收是可以的,但是发送的话,发送的信号与槽就无法正常触发了。
附上附件, aaa.zip (8 K) 下载次数:0 client.zip (5 K) 下载次数:0
aaa.zip 是服务端 client.zip是客户端
  1. #include "tcpserver.h"
  2. #include "ui_tcpserver.h"
  3. #include "server.h"
  4. #include "back_stage.h"
  5. #include <qglobal.h>
  6. TcpServer::TcpServer(QWidget *parent) :
  7. QWidget(parent),
  8. ui(new Ui::TcpServer)
  9. {
  10. ui->setupUi(this);
  11. server = new Server(this);
  12. back_stage *BS = new back_stage(this);
  13. //--接收---
  14. connect(server,SIGNAL(updateBS(QString,double,int)),BS,SLOT(rev_data(QString,double,int)));
  15. //--发送---
  16. Q_ASSERT(connect(BS,SIGNAL(signal_send(QString,QString,double)),\
  17. server,SLOT(sendClient_msg(QString,QString,double))));
  18. }


离线1048797679
只看该作者 8楼 发表于: 2011-07-31
感谢CuteQt总群里的一个朋友帮忙,总算知道是哪里出问题了,虽然还不知在该情况下怎么解决。
把back_stage中的Tcpserver->hide()注释掉,按新生成的界面中的发送按钮,即可发送数据。
虽然不是最后想要的结果。
快速回复
限100 字节
 
上一个 下一个