【问题标题】:QObject::connect: No such slot QMainWindow::On_clicked_delCare() in ../Gestion_parc_auto/choice_page_2.cpp:91 [closed]QObject::connect: ../Gestion_parc_auto/choice_page_2.cpp:91 中没有这样的插槽 QMainWindow::On_clicked_delCare() [关闭]
【发布时间】:2022-02-03 00:01:51
【问题描述】:

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

文件.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: No such slot QMainWindow::On_clicked_delCare()

【问题讨论】:

标签: c++ qt slot qobject


【解决方案1】:

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

【讨论】:

  • 谢谢,但是如果将 Q_Object 放在声明的顶部,我会收到许多其他错误:
  • : erreur : undefined reference to `vtable for choice_page_2'
  • : 未定义的对`vtable for choice_page_2'的引用
  • 之后需要运行qmake
【解决方案2】:

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

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

(你也可以删除connect的一部分QObject::

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多