• 12697阅读
  • 10回复

信号和槽有时候连接不上,大家有遇到过吗 [复制链接]

上一主题 下一主题
离线vlolv
 

只看楼主 倒序阅读 楼主  发表于: 2008-09-28
— 本帖被 XChinux 执行加亮操作(2008-09-28) —
关键词: QListView信号槽
我在一个类的构造函数中将QListView的signal连到我的slot,无论什么信号,也无论什么槽,死活都连不上???而其他的比如QTableView的signal都工作正常,就是这个QListView的signal怎么都连不上????类似连接QListView的signal与slot的语句过程在其他类我都用了好多遍了,可以排除是语法的问题。大家有遇到过这种情形吗?

另外:有没有方法调试connect,跟踪signal发射后,都怎么调用slot,调用了哪些slot?

源代码:
在class a 中连接成功,工作正常
类a中声明:
class a: public QWidget
public slots:
    void onDoubleClickPltList(const QModelIndex &mi);

类a构造函数中: 
    pelletList = new QListView(this);
    pelletList->setModel(udata.pltModel);
    this->connect(this->pelletList, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(onDoubleClickPltList(const QModelIndex &)));

下面的class b中,QListView的任何信号连接到我的slot,死活都成功不了。害怕敲错了,我都是从a中copy过来,改改变量名的。在构造函数中有其他信号和槽的连接,都成功的。请各位看看。
类b中声明:
class b: public QWidget
public slots:
    void onDoubleClickRxList(const QModelIndex &mi);   

类b构造函数中:
    rxList = new QListView(this);
    rxList->setModel(udata.rxModel);
    rxList->setEditTriggers(QAbstractItemView::NoEditTriggers);
    this->connect(this->rxList, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(onDoubleClickedRxList(const QModelIndex &)));
  //this->connect(this->pelletList, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(onDoubleClickPltList(const QModelIndex &)));

[ 此贴被vlolv在2008-10-04 11:21重新编辑 ]
离线laozi999
只看该作者 1楼 发表于: 2008-09-28
俺也经常连不上
离线lazybone
只看该作者 2楼 发表于: 2008-09-28
可能还是代码的问题 仔细找找 不行贴源代码
读了 我看不懂 C++
离线garyfcg
只看该作者 3楼 发表于: 2008-09-28
以前我也碰见这样的情况.当时是将这个信号传递给另一个信号,再给SLOT ,就解决了
离线codespy
只看该作者 4楼 发表于: 2008-09-28
遇到过,因为我打错了信号或槽函数的一个或几个字母。
离线sbtree
只看该作者 5楼 发表于: 2008-09-29
还是代码的问题,特别要注意信号和槽的参数一致性问题,槽中的参数个数可以少于信号的,但不能多,定义槽的时候不光是类型一致,还不能利用默认的参数值传递信息,另外定义槽的时候参数前的const关键字以及函数前或后的const也不能跟信号中的有冲突。如果这些都考虑到了,信号和槽的连接应该不会不成功的。
windows 7 + VC++2008 + Qt4.5.2
离线jzj139
只看该作者 6楼 发表于: 2008-09-29
没有遇到过
qt
离线vlolv

只看该作者 7楼 发表于: 2008-10-03
已在1楼贴上代码,请各位看看
离线netlove

只看该作者 8楼 发表于: 2008-10-06
我十一前程序中出现了这个问题。十一回来解决了。我在类中自定义了两个信号,两个信号名字相同,参数不同,结果就是没反应。后来把其中一个名字改了,就可以了,不知道为什么这样,普通的C++函数重载可以,不知道为什么在信号中就不能用了。
离线vlolv

只看该作者 9楼 发表于: 2008-11-13
引用第8楼netlove于2008-10-06 14:06发表的  :
我十一前程序中出现了这个问题。十一回来解决了。我在类中自定义了两个信号,两个信号名字相同,参数不同,结果就是没反应。后来把其中一个名字改了,就可以了,不知道为什么这样,普通的C++函数重载可以,不知道为什么在信号中就不能用了。


终于发现了,我的两个名字不一样。-_-!
onDoubleClickRxList      声明
onDoubleClickedRxList  连接

我是在连接的地方用右键转到定义,发现找不到函数,发明白过来是名字一致。强烈建议qt在编译的时候把这个作一下检查~~~~~
离线opengl
只看该作者 10楼 发表于: 2008-11-17
加上 Q_OBJECT
快速回复
限100 字节
 
上一个 下一个