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

Qt Connecting SIGNAL and SLOT in object member of MainWindow

本文关键字:连接 SIGNAL SLOT 成员 MainWindow 对象 Qt      更新时间:2023-10-16

我有一个类MyClass:

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

我想连接这些在MyClass使用connectSignalAndSlot(),像这样:

  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 ..MyProjectmyclass.cpp:48

我必须使按钮和插槽公共,并在MainWindow类中使用它们吗?是否没有办法将其保持在MyClass级别?

谢谢你的帮助!

您必须从QObject继承MyClass并在MyClass定义(头文件)中添加Q_OBJECT宏以使插槽/信号工作。

class MyClass : public QObject
{
     Q_OBJECT
public:
     ....
};

继承QObject是正确的方式,但您仍然缺少qt -元对象代码。类的头文件应该像这样:

#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass : public QObject {
    Q_OBJECT
    // your methods, variables, slots and signals
}
#endif

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