• 5120阅读
  • 6回复

[提问]信号槽问题,我想把this传出去 [复制链接]

上一主题 下一主题
离线houtinghua
 

只看楼主 倒序阅读 楼主  发表于: 2012-08-01
mylabel.h

public slots:
    void b(MyLabel *aa);
signals:
    void a();
    void c();


mylabel.cpp



#include "mylabel.h"
#include <QDebug>
#include <QString>


MyLabel::MyLabel(const QString &text,QWidget *parent)
    :QLabel(parent)
{
    connect(this,SIGNAL(a()),this,SIGNAL(c()));
    connect(this,SIGNAL(c()),this,SLOT(b(this)));
}




void MyLabel::mousePressEvent(QMouseEvent *event)
{
    emit a();
}


void MyLabel::b( MyLabel*aa)
{
    QString strnsha = "";
}


为什么槽函数b不能被调用呢?
离线shiziyang

只看该作者 1楼 发表于: 2012-08-01
我从来没看见过这种写法,一般槽的参数只会比信号少吧?
如果只是想把自己传进槽里去,可以在槽里用QObject::sender()把指针接下来
离线roywillow

只看该作者 2楼 发表于: 2012-08-01
单从这句来看
connect(this,SIGNAL(c()),this,SLOT(b(this)));
这个是一个经常见的想当然的的错误:槽函数的参数只能由信号来赋予,想当然地自己手动赋值是不行的
你应该是想获得发送信号者的指针对吧,那么在槽函数中调用sender()可以直接获得发送者的指针,然后再用qobject_cast来转换为发送者的类型
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线benbenmajia

只看该作者 3楼 发表于: 2012-08-02
signal slot,slot的参数是对应于signal的,如果需要传参,首先必须声明相对应的传参数的signal
安然.....
离线benbenmajia

只看该作者 4楼 发表于: 2012-08-02
至于发送类自身指针,例子:
class A。。。。。。
signals:
void signal(A*);
安然.....
离线houtinghua

只看该作者 5楼 发表于: 2012-08-02
谢谢3位 ,可惜没看懂4楼的例子,我用一下方法解决了

void MyLabel::b( )
{
   MyLabel *lab = (MyLabel*)  QObject::sender();

}

qt的人真和蔼,不习惯
离线XChinux

只看该作者 6楼 发表于: 2012-08-02
引用第5楼houtinghua于2012-08-02 10:25发表的  :
谢谢3位 ,可惜没看懂4楼的例子,我用一下方法解决了
void MyLabel::b( )
{
   MyLabel *lab = (MyLabel*)  QObject::sender();
.......

因为这里没有水,哈哈。

MyLabel *lab = qobject_cast<MyLabel *>(sender());
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个