我试图通过信号/插槽选项连接两个小部件,但我不断收到“没有这样的插槽”的错误。事实是,在编写程序时,我使用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。
那么为什么会出现这个错误?
答案 0 :(得分:3)
在向班级添加信号/插槽后,您是否重新生成了项目文件?根据您的构建系统,这是使事情有效的必要条件。
Qt需要预处理类标题(它不会在cpp文件中扫描)来生成实现信号/插槽行为的附加代码(对于使用MOC编译器的信号/插槽)。如果Qt不知道类X包含信号或槽,它将不会生成该类的元信息。
通过重新生成项目文件/生成文件Qt将再次扫描所有文件并为MOC编译器生成必要的命令。
答案 1 :(得分:1)
您的广告位已受到保护,因此renderingWidget
无法看到。如果您想从外部TableViewList
设置与其的连接,则需要将其公开。