• 7805阅读
  • 19回复

两个类,自定义信号实现两个类的通信,不能成功??? [复制链接]

上一主题 下一主题
离线songfangfang
 
只看楼主 倒序阅读 楼主  发表于: 2010-07-07
— 本帖被 XChinux 执行加亮操作(2010-10-21) —
现在我定义了两个。ui的类A和B,当类A中有数据变化后发个自定义的信号给类B,我是这样做的,
在A。h中添加:
signals:
     void a_signal();
在A.cpp中:
if(datachange)
{
      emit  a_signal();
}
在B.h中:
#include “A.h”

private:
     A  *a;

在A.cpp中
a= new A();
connect(a,SIGNAL(a_signal),this,SLOT(get_signal())));

编译无错误,可是程序运行的时候却一直进不了类B中的get_signal()槽函数,不知道是什么原因,有哪位仁兄知道怎么解决啊?谢啦

离线抠涕
只看该作者 1楼 发表于: 2010-07-07
SIGNAL(a_signal())
离线dbzhang800

只看该作者 2楼 发表于: 2010-07-07
注意看控制台的输出,如果你程序中确实是这么写的,运行中肯定会有警告的。
离线songfangfang
只看该作者 3楼 发表于: 2010-07-07
回 1楼(抠涕) 的帖子
呵呵,我刚刚发帖的时候写错了,程序中试SIGNAL(a_signal());
离线songfangfang
只看该作者 4楼 发表于: 2010-07-07
回 2楼(dbzhang800) 的帖子
没有警告信息,用qDebug调试发现也能进i
f(datachange)
{
      emit  a_signal();
}
说明类A的信号发出去了,可是类B中就是接不到,
我在类B中测试自己给自己发信号
connect(this,SIGNAL(b_signal),this,SLOT(get_signal());这样是可以的,能进入槽函数,
现在我就不知道哪里出错了
离线songfangfang
只看该作者 5楼 发表于: 2010-07-07
回 2楼(dbzhang800) 的帖子
这个时候我测试的程序,您看下,看有什么不对的地方 test.rar (624 K) 下载次数:9
离线抠涕
只看该作者 6楼 发表于: 2010-07-07
没法解压,  把 a.h 贴上来吧
离线songfangfang
只看该作者 7楼 发表于: 2010-07-07
回 6楼(抠涕) 的帖子
#ifndef A_H
#define A_H

#include <QWidget>

namespace Ui {
    class A;
}

class A : public QWidget {
    Q_OBJECT
public:
    A(QWidget *parent = 0);
    ~A();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::A *ui;

private slots:
    void on_pushButton_clicked();

signals:
    void a_signal();
};

#endif // A_H
离线songfangfang
只看该作者 8楼 发表于: 2010-07-07
回 7楼(songfangfang) 的帖子
这个是我的A.H的文件,怎么没办法解压呢?
单击A.UI上的pushbuttons就发送信号a_signal();
离线抠涕
只看该作者 9楼 发表于: 2010-07-07
Linux 下 unrar 解压失败。

头文件看起来没什么问题。你换个zip压缩看
离线songfangfang
只看该作者 10楼 发表于: 2010-07-07
回 9楼(抠涕) 的帖子
我这个是xp下的,呵呵,这个是我的测试程序,我现在给你发下LINUX下的,你在整体看看 test.tar.gz (76 K) 下载次数:4
离线抠涕
只看该作者 11楼 发表于: 2010-07-07
你是在 run 里面 邦了 tcp 的 signal

但是你没有实例化 run 阿。
离线paranoid
只看该作者 12楼 发表于: 2010-07-07
在B中又new 出一个A2,跟你在MainWindow里new出来的A1,是两个不同实例,
你show出来的是A1,点击的按钮是在A1上,而你连接的是A2,那当然收不到了。
直接在MainWindow中,connect(a,SIGNAL(a_signal()),b,SLOT(get_signal()));
离线songfangfang
只看该作者 13楼 发表于: 2010-07-07
回 11楼(抠涕) 的帖子
是的,我在xp下实例了。在MainWindow中有两个PUSHBUTTONS
点击分别显示A和B,然后A中还有一个PUSHBUTTONS向B发送信号,可是这样还是不行啊,
在linux下,我该了一下,有点小问题,呵呵,感觉进去槽函数了。您在看下 test.tar.gz (76 K) 下载次数:2
离线songfangfang
只看该作者 14楼 发表于: 2010-07-07
回 12楼(paranoid) 的帖子
paranoid一语中的,是的,就是这个原因,呵呵,这样就是两个不同的对象了,没想到啊,谢谢你啊,paranoid
离线songfangfang
只看该作者 15楼 发表于: 2010-07-07
回 11楼(抠涕) 的帖子
同时也谢谢你,抠鼻,呵呵,有点别扭~~~
离线抠涕
只看该作者 16楼 发表于: 2010-07-08
额, 找个好日子换个马甲
离线songfangfang
只看该作者 17楼 发表于: 2010-07-08
回 16楼(抠涕) 的帖子
呵呵,以后多交流啊,我现在在弄软键盘,在X11下可以,ARM架构下的就不行了,在QT/E arm架构下有个QWSServer类,可以实现软键盘,现在还不知道怎么做,兄台做过这方面的吗?指点一二~~~
离线抠涕
只看该作者 18楼 发表于: 2010-09-26
回 17楼(songfangfang) 的帖子
那个。。。有个项目是有软键盘的, 但是是带X的设备。而且键盘那块不是我做的,了解不多。。。
离线billlee
只看该作者 19楼 发表于: 2010-09-26
connect(a,SIGNAL(a_signal),this,SLOT(get_signal())));
connect(a,SIGNAL(a_signal()),this,SLOT(get_signal())));
第二行才是对的
快速回复
限100 字节
 
上一个 下一个