2

为什么单击按钮时按钮对象没有收到 sigKK() 信号?

当一个信号发出时,所有的qt对象都能接收到这个信号吗?

代码如下:

class PushButton :  public QPushButton
{
    Q_OBJECT
signals:
    void sigKK();
};

PushButton 类继承自 QPushButton,但此处不连接信号和插槽。这是正确的吗?

class MainWindow : public QMainWindow
{
    Q_OBJECT    
public:
    explicit MainWindow(){
        resize(400,200);    
        connect(this,SIGNAL(sigKK()),this,SLOT(showRecv1()));   

        button = new PushButton();
        button->setText("Hello,All");
        button->resize(40,15);
        connect(button, SIGNAL(clicked()),this,SLOT(buttonCK()));
        connect(button, SIGNAL(sigKK()),this,SLOT(showRecv2()));
            //**I can connect sigKK signal with showRecv2 slot here ?**** 
        button->show();
    }
    ~MainWindow(){      
    }
signals:
    void sigKK();
public slots:
    void showRecv1(){
        cout<<"recved 1"<<endl;
        resize(100,100);
    }
    void showRecv2(){
        cout<<"recved 2"<<endl;
        button->setText(".....");
    }
    void buttonCK(){
        emit sigKK();
        cout<<"emited"<<endl;
    }
private:
    PushButton *button ; 
};
#endif
4

1 回答 1

1

当一个信号发出时,所有的 qt 对象都能接收到这个信号吗?

没有。当一个信号被发出时,它只被带有信号或槽连接到它的 QObjects 接收。

您的 MainWindow 和 PushButton 都有一个同名的信号......但它们仍然是不同的信号。它们彼此完全无关。当 MainWindow 发出sigKK时,这对 PushButton 没有影响sigKK

在您的示例中,sigKK似乎完全没有必要。也许您可以clicked()直接连接到您想要执行的操作?

connect(button, SIGNAL(clicked()),this,SLOT(showRecv1()));
connect(button, SIGNAL(clicked()),this,SLOT(showRecv2()));
于 2013-03-07T02:48:21.167 回答