我最近一直在努力学习C ++和Qt4,但我遇到了绊脚石。
我有以下课程和实施:
class Window : public QWidget
{
public:
Window();
public slots:
void run();
private:
//...
};
和
Window::Window()
{
//...
connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));
//...
}
Window::run()
{
//...
}
然而,当我尝试构建并运行它时,虽然它构建得很好,它会立即退出并显示消息
Object::connect: No such slot QWidget::run()
除非我做错了,否则Qt似乎没有认出插槽run()
有人可以帮忙吗?
更新
代码现在是:
class Window : public QWidget
{
Q_OBJECT
public:
Window(QWidget *parent = 0);
public slots:
void run();
private:
//...
};
和
Window::Window(QWidget *parent) : QWidget(parent)
{
//...
connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));
//...
}
Window::run()
{
//...
}
该程序仍“意外完成”,但不再告诉我没有QWidget::run()
答案 0 :(得分:8)
您可能忘记了Window类中的Q_OBJECT宏吗?
class Window : public QWidget
{
Q_OBJECT
public:
Window()
...
答案 1 :(得分:2)
我也遇到了这个问题,并且在网上找不到任何帮助。我发现在重新编译之前忘记删除moc_ *文件并且它使用旧的moc文件来创建可执行文件。这导致它不知道我编码的任何新插槽。如果所有其他建议都失败,我会检查一下。
有时最简单的解决方案是最佳解决方案......
答案 2 :(得分:1)
什么是runBtn
,它是如何创建的?如果它是作为ui文件的一部分创建的,您是否正在调用setupUi()
?你的窗口类是如何创建的?您似乎省略了可能出现错误的代码(// ...
)。
我可以给出最好的建议,尝试将问题减少到一个非常小的可编译示例。这有两个原因:
希望这有帮助。
答案 3 :(得分:0)
看起来在调用connect时没有实例化runBtn - 正如其他一个答案所暗示的那样。
使用断点检查崩溃发生的位置。