QT没有这样的插槽[重复]

Posted

技术标签:

【中文标题】QT没有这样的插槽[重复]【英文标题】:QT no such slot [duplicate] 【发布时间】:2013-01-13 13:49:47 【问题描述】:

我有这样一段代码:

przystanki.h

#ifndef PRZYSTANKI_H
#define PRZYSTANKI_H
#include "component.h"
class Przystanki : public Component

public:
    Przystanki(QWidget *parent = 0);

signals:
    void deletePosition(QString);
public slots:
    void deleteListItem();
    void addListItem(QString label);
    void createListItem(QString label, DodajPrzystanek* elem);

;

#endif // PRZYSTANKI_H

组件.h

#ifndef COMPONENT_H
#define COMPONENT_H
#include <QListWidget>
#include <QGroupBox>
#include "dodajprzystanek.h"
class Component : public QGroupBox

    Q_OBJECT
public:
    explicit Component(QString name, QWidget *parent = 0);
    QListWidget* list;

;

#endif // COMPONENT_H

使用它的片段:

MyWindow::MyWindow(QWidget *parent) :
QMainWindow(parent)

webView = new MyWebView(this);
mainlayout = new QGridLayout();
mainlayout->addWidget(webView, 0,0);
Przystanki *stop = new Przystanki(this);
mainlayout->addWidget(stop, 0, 1);
QHBoxLayout* bottom = new QHBoxLayout();
//bottom->addWidget(new QLabel("Linie"));
bottom->addWidget(new Component("Autobusy"));
bottom->addWidget(new Component("Linie"));
QHBoxLayout* hrightCorner = new QHBoxLayout();
QVBoxLayout* rightCorner = new QVBoxLayout();
rightCorner->addStretch(1);
rightCorner->addWidget(new QPushButton("Start", this));
//QLabel* label = new QLabel("Labelka");

//rightCorner->addWidget(label);
rightCorner->addStretch(1);
hrightCorner->addLayout(rightCorner);
mainlayout->addLayout(bottom, 1, 0);
mainlayout->addLayout(hrightCorner, 1, 1);
hrightCorner->setAlignment(Qt::AlignCenter);
this->setCentralWidget(new QWidget);
this->centralWidget()->setLayout(mainlayout);
connect(webView, SIGNAL(getMapPosition(QString)), stop, SLOT(addListItem(QString)));
connect(stop, SIGNAL(deletePosition(QString)), webView, SLOT(deleteMarker(QString)));



我得到的是:

loaded the Generic plugin 
Object::connect: No such slot Component::addListItem(QString)
Object::connect: No such signal Component::deletePosition(QString)

它发生在我将插槽和信号的定义从 Component 移动到它的派生类 Przystanki 之后。我已经删除了整个构建目录,运行 clean,运行 qmake 并再次构建,但它没有帮助。谁能向我解释我做错了什么?

【问题讨论】:

我在这段代码中没有看到任何相关的connect 调用。另外,应该有文件名和行,连接发生在哪里。 我已经编辑了这个问题。我删除了一些没有插槽的第一行,因为在这种情况下,插槽确实丢失了。 【参考方案1】:

您的 Przystanki 类缺少 Q_OBJECT 宏。添加它,将 przystanki.h 添加到 .pro 文件中的 HEADERS(如果还没有的话)并重新运行 qmake。

【讨论】:

我试过这样做,但是我得到了链接器错误,我不明白。错误是:未定义对 `vtable for Przystanki' 的引用 @WojciechReszelewski,这意味着您的 *.moc 没有链接到。可能你的构建系统有问题。 我已经删除了整个构建目录,清理,运行 qmake 并再次构建,它工作。非常感谢。

以上是关于QT没有这样的插槽[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Qt QProcess::finished() 信号没有这样的插槽

Qt4 现有插槽无法识别

如何修复QObject::connect:没有这样的插槽..将发送者连接到同一类中的插槽时[重复]

在 Qt 应用程序中似乎无法识别插槽 [重复]

Qt信号/插槽不起作用[非常基本] [重复]

Qt 5 将带有参数的插槽分配给 QPushButton