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

时间:2015-02-09 06:40:32

标签: c++ qt

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

client.h

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

client.cpp

void client::prework()
{
  //implementation

}

mainwindow.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();
 }

1 个答案:

答案 0 :(得分:0)

MainWindow::MainWindow(QWidget *parent) : ...
{
   ... 
   client obj1;
   ...
 } //  1

标有// 1的行是obj1被销毁的行。局部变量不会超出创建它们的范围。 (QObject destructor确保信号断开。)

如果你希望它比构造函数更长,你需要使该对象成为主窗口类的成员。