C++ Qt连接信号和主窗口对象成员中的插槽

C++ Qt连接信号和主窗口对象成员中的插槽,c++,qt,signals-slots,C++,Qt,Signals Slots,我有一个MyClass的类: - private: pushButton *button; void connectSignalAndSlot(); - private slot: void buttonAction(); 我想使用connectSignalAndSlot()在MyClass中连接这些,如下所示: void MyClass::connectSignalAndSlot() { QObject::connect(but

我有一个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级别


谢谢你的帮助

必须让
MyClass
继承
QObject
并在
MyClass
定义(头文件)中添加
Q\u对象
宏,才能使插槽/信号工作

class MyClass : public QObject
{
     Q_OBJECT

public:
     ....
};

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

#ifndef MYCLASS_H
#define MYCLASS_H

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

#endif

不要忘记创建文件,最简单的方法是使用
qmake
QtCreator
IDE。这允许它在应用程序输出中运行而不会出现这些错误。谢谢我在我的项目中使用的两个类上做这个。一个可行,另一个给出了“QObject::QObject(constQObject&)是私有的”错误。我正在研究,发现了问题。继承QObject的类不应调用复制构造函数。我将对象改为指针,问题就解决了。再次感谢!