Qt插槽和继承:为什么我的程序试图连接到父类而不是子类?

con*_*Kid 8 c++ inheritance qt4 signals-slots

在Qt程序中,我有一个QWidget类,它是另一个声明的类的超类:

class Renderer : public QGLWidget
{
    Q_OBJECT
    ....
}

class A : public Renderer
{ .... }
Run Code Online (Sandbox Code Playgroud)

现在我有一个不存在的A类插槽Renderer,但是当我尝试运行该程序时,它无法连接到A类:

Object::connect: <sender name: 'push_button'>
Object::connect: <receiver name: 'A'>
Object::connect: No such slot Renderer::loadDialog() in <file path>
Run Code Online (Sandbox Code Playgroud)

为什么要尝试连接到渲染器而不是A?我应该在Renderer中有一个同名的插槽吗?

谢谢

编辑:

这是A中插槽的声明:

public slots:
    void loadDialog();
Run Code Online (Sandbox Code Playgroud)

至于连接,我主要依赖于Qt Creator,但这是ui_windows.h文件中的内容:

QObject::connect(pushButton, SIGNAL(clicked()), A, SLOT(loadDialog()));
Run Code Online (Sandbox Code Playgroud)

希望有点清楚:)

mPo*_*opp 13

你能显示连接信号和插槽的代码吗?也许在A类中查看插槽声明也会有所帮助.

编辑:

尝试在子类A中添加Q_OBJECT宏.另一件事可能是插槽不是虚拟的(但根据我读到的内容不应该有所不同).

这些只是猜测,你发布的代码看起来对我来说没问题.我没有在该计算机上使用Qt,所以我无法尝试:(.

  • 无论何时想要向子类声明新信号/槽,都必须使用Q_OBJECT宏 (2认同)