QObject::connect: 在 ../Gestion_parc_auto/choice_page_2.cpp:91 中没有这样的插槽 QMainWindow::On_clicked_delCare()

QObject::connect: No such slot QMainWindow::On_clicked_delCare() in ../Gestion_parc_auto/choice_page_2.cpp:91

求求你,帮我解决这个问题。我不知道这个问题,但如果我把 QObject 放在 file.h 中,他会产生错误!

file.h

#include <QMainWindow>
class choice_page_2 : public QMainWindow
{
public:
    choice_page_2();
    QWidget* M_Widget = new QWidget();

public slots:
    
    void On_clicked_delCare();
   
};

#endif // CHOICE_PAGE_2_H

fill.cpp

    choice_page_2::choice_page_2()
{QPushButton *ManageBtn = new QPushButton(tr("Gérer une voiture"));
       QMenu *menu = new QMenu(this);
       QAction* AddCare = new QAction(tr("Ajouter une voiture"), this);
       QAction* DelCare = new QAction(tr("Supprimer une voiture"), this);
      
    QObject::connect( DelCare, SIGNAL(triggered()),this, SLOT(On_clicked_delCare()));
}

我得到这个错误:**QObject::connect:没有这样的插槽QMainWindow::On_clicked_delCare()

所有包含信号或槽的 类 必须在其声明的顶部提及 Q_OBJECT

不要使用旧连接样式,使用 Qt5 中引入的新连接样式:https://wiki.qt.io/New_Signal_Slot_Syntax 在您的情况下是:

QObject::connect( DelCare, &QAction::triggered, this, &choice_page_2::On_clicked_delCare);

(您也可以删除 connectQObject:: 部分)

然后你不仅可以连接到任何函数或方法,不管它是否被标记为插槽(即你的插槽将不依赖于 运行 MOC - 这可能是你的问题),但你有编译时还会检查信号和槽参数是否匹配。这种新方法只有好处。我的建议是忘记 Qt4 中曾经存在的旧样式。

PS: 我假设你不再使用 Qt4。