尽管连接成功,但未调用插槽

Slot not getting called despite successful connect

本文关键字:调用 插槽 连接 成功      更新时间:2023-10-16

我想将一个按钮连接到client::prework()。经过琐碎的调试,我发现client::prework()没有被调用(它的任何部分都没有被执行),但QObject::connect调用返回true

client.h

class client : public QObject
{
   //some declarations
   public slots:
   int prework();
};

客户端.cpp

void client::prework()
{
  //implementation
}

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   QWidget * wdg = new QWidget(this);
   QVBoxLayout *vlay = new QVBoxLayout(wdg);
   QPushButton *btn1 = new QPushButton("connectme");
   vlay->addWidget(btn1);
   client obj1;
   qDebug()<<"h";
   QObject::connect(btn1,SIGNAL(clicked()),&obj1,SLOT(prework()));
// obj1.prework();
 }
MainWindow::MainWindow(QWidget *parent) : ...
{
   ... 
   client obj1;
   ...
 } //  1

// 1标记的线是obj1被破坏的线。局部变量的寿命不会超过创建它们的范围。(QObject析构函数确保信号断开。)

如果希望该对象的寿命比构造函数长,则需要使其成为主窗口类的成员。