Qt:为啥我的按钮没有收到信号?

Posted

技术标签:

【中文标题】Qt:为啥我的按钮没有收到信号?【英文标题】: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

【问题讨论】:

【参考方案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() 在每次点击时发出。

以上是关于Qt:为啥我的按钮没有收到信号?的主要内容,如果未能解决你的问题,请参考以下文章

QT Creator - 删除元素的“没有匹配的信号”

Qt QListwidget为啥信号没用

Qt 应用程序在分叉到后台时意外收到 HUP 信号

为啥我的进程总是收到信号 SIGPIPE,然后管道坏了。我在gdb看到的

QT中父窗口响应子窗口动作

qt 关于信号槽传递的参数问题