【问题标题】:Qt: Why doesn't my button get the signal?Qt:为什么我的按钮没有收到信号?
【发布时间】:2013-03-07 02:35:30
【问题描述】:

为什么当按钮被点击时,button 对象没有收到 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

【问题讨论】:

    标签: qt signals-slots emit


    【解决方案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()));
    

    【讨论】:

    • 但是,我的目的是:当按钮被点击时,会发出一个 sigKK() 信号并且按钮会接收它,我该怎么做呢?我不想在按钮上连接 clicked() 和 showRecv2()。
    • 即使发出了 sigKK,您的按钮也没有插槽来接收信号。发出 sigKK 时应该调用按钮上的什么函数?
    • 感谢 Slavik81。我想我可以使用如下代码:connect(button, SIGNAL(clicked()),button,SIGNAL(sigKK()));对吗?
    • 是的。这将导致信号 PushButton::sigKK() 在每次点击时发出。
    猜你喜欢
    • 2016-04-20
    • 2017-12-26
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多