Qt在MainWindow的对象成员中连接SIGNAL和SLOT

时间:2014-07-27 15:19:32

标签: c++ qt signals-slots

我有一个MyClass类:

  - private: 
      pushButton *button;
      void connectSignalAndSlot();
  - private slot: 
      void buttonAction();

我想使用connectSignalAndSlot()在MyClass中连接这些,如下所示:

  void MyClass::connectSignalAndSlot()
  {
    QObject::connect(button,SIGNAL(clicked()),this,SLOT(buttonAction()));
  }

这给了我一个错误

no matching function for call to 'QObject::connect(QPushButton*&, const char*, MyClass* const, const char*)';

如果我使用MyClass继承QObject,程序将编译并启动,但随后我在“应用程序输出”窗格中显示以下问题:

QObject::connect: No such slot QObject::buttonAction() in ..\MyProject\myclass.cpp:48

我是否必须公开按钮和插槽并仅在MainWindow类中使用它们?有没有办法把它保持在MyClass级别?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您必须MyClass继承QObject并在Q_OBJECT定义(标题文件)中添加MyClass宏,才能让广告位/信号发挥作用。

class MyClass : public QObject
{
     Q_OBJECT

public:
     ....
};

答案 1 :(得分:1)

继承QObject是正确的方法,但您仍然缺少Qt-Meta Object代码。您的类的头文件应如下所示:

#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass : public QObject {
    Q_OBJECT
    // your methods, variables, slots and signals
}

#endif

不要忘记创建moc文件,最简单的方法是使用qmakeQtCreator IDE。