2

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

所以我有一个小部件:

渲染区域.h

    类renderArea:公共QGraphicsView
    {
        Q_OBJECT
    上市:
        renderArea(QWidget *parent = 0);

    void addClothoid(浮动长度,浮动 startCurvature,浮动 endCurvature);

    信号:
        void sendData(浮点长度,浮点startCurvature,浮点endCurvature);

    };

渲染区域.cpp

    void renderArea::addClothoid(浮动长度,浮动 startCurvature,浮动 endCurvature)
    {
        ...

            发出发送数据(长度,开始曲率,结束曲率);
        }
    }

第二个小部件:

表视图列表.h

    类 TableViewList:公共 QTableView
    {
        Q_OBJECT

    上市:
        TableViewList(QWidget* parent = 0);

    受保护的插槽:
        void onClothoidAdded(浮动长度,浮动 startCurvature,浮动 endCurvature);
    };

表视图列表.cpp

    void TableViewList::onClothoidAdded(浮动长度,浮动 startCurvature,浮动 endCurvature)
    {

    ...
    }

和主要小部件:

renderingwidget.cpp 我连接上面的2:

    renderingWidget::renderingWidget(QWidget *parent) :
            QWidget(父),
            ui(新的 Ui::renderingWidget)
    {
        ui->setupUi(这个);

    连接(ui->graphicsView,信号(sendData(float,float,float)),ui->clothoidTable,
                SLOT(onClothoidAdded(float,float,float)));
    }

ui->graphicsView 已提升为 renderArea,ui->clothoidTable 已提升为 TableViewList。

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

4

2 回答 2

3

将信号/插槽添加到类后,您是否重新生成了项目文件?根据您的构建系统,这是使事情正常工作所必需的。

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

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

于 2011-08-05T13:08:04.787 回答
1

您的插槽受到保护,因此对 不可见renderingWidget。如果您想从外部建立与它的连接,则需要将其公开TableViewList

于 2011-08-05T14:04:50.307 回答