错误'没有这样的插槽'qt

时间:2011-08-05 12:53:55

标签: qt4 signals-slots slot

我试图通过信号/插槽选项连接两个小部件,但我不断收到“没有这样的插槽”的错误。事实是,在编写程序时,我使用Ctrl + Space只是为了确保我不做任何拼写错误。

所以我有一个小部件:

renderArea.h


    class renderArea : public QGraphicsView
    {
        Q_OBJECT
    public:
        renderArea(QWidget *parent = 0);

    void addClothoid(float length, float startCurvature, float endCurvature);

    signals:
        void sendData(float length, float startCurvature, float endCurvature);

    };

renderArea.cpp


    void renderArea::addClothoid(float length, float startCurvature, float endCurvature)
    {
        ...

            emit sendData(length, startCurvature, endCurvature);
        }
    }

第二个小部件:

tableViewList.h


    class TableViewList: public QTableView
    {
        Q_OBJECT

    public:
        TableViewList(QWidget* parent = 0);

    protected slots:
        void onClothoidAdded(float length, float startCurvature, float endCurvature);
    };

tableViewList.cpp


    void TableViewList::onClothoidAdded(float length, float startCurvature, float endCurvature)
    {

    ...
    }

和主要小部件:

renderingwidget.cpp我连接上面的2:


    renderingWidget::renderingWidget(QWidget *parent) :
            QWidget(parent),
            ui(new Ui::renderingWidget)
    {
        ui->setupUi(this);

    connect(ui->graphicsView, SIGNAL(sendData(float,float,float)), ui->clothoidTable,
                SLOT(onClothoidAdded(float,float,float)));
    }

ui-> graphicsView已被提升为renderArea和ui-> clothoidTable到TableViewList。

那么为什么会出现这个错误?

2 个答案:

答案 0 :(得分:3)

在向班级添加信号/插槽后,您是否重新生成了项目文件?根据您的构建系统,这是使事情有效的必要条件。

Qt需要预处理类标题(它不会在cpp文件中扫描)来生成实现信号/插槽行为的附加代码(对于使用MOC编译器的信号/插槽)。如果Qt不知道类X包含信号或槽,它将不会生成该类的元信息。

通过重新生成项目文件/生成文件Qt将再次扫描所有文件并为MOC编译器生成必要的命令。

答案 1 :(得分:1)

您的广告位已受到保护,因此renderingWidget无法看到。如果您想从外部TableViewList设置与其的连接,则需要将其公开。