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:为啥我的按钮没有收到信号?的主要内容,如果未能解决你的问题,请参考以下文章