Qt4 插槽和信号:Qt4 无法找到信号

Posted

技术标签:

【中文标题】Qt4 插槽和信号:Qt4 无法找到信号【英文标题】:Qt4 slots and signals: Qt4 has trouble finding the signal 【发布时间】:2010-07-21 12:07:25 【问题描述】:

我正在尝试使用 QGLWidget 内容的 FPS 更新状态栏。我将它们连接如下(在 MainWin 类中):

glWidget = new GLWidget;
ui.verticalLayout->addWidget(glWidget);

connect(glWidget,       SIGNAL( updateFPSSignal(float)  ),
        this,           SLOT(   updateFPSSlot(float)    ));

槽位如下:

void MainWin::updateFPSSlot(float fps)
this->statusBar()->showMessage(QString::number(fps), 0);

在 MainWin 类定义中,我有:

public slots:
    void updateFPSSlot(float fps);

信号如下:(据我了解,这不应该在这里,但是没有它程序拒绝编译)。

void GLWidget::updateFPSSignal(float fps)

我在 GLWidget 类定义中有以下内容:

signals:
    void updateFPSSignal(float fps);

计算完fps后,我调用:

emit updateFPSSignal(fps);

但是,当应用启动时,会打印出以下内容:

Object::connect: No such signal QGLWidget::updateFPSSignal(float) in /Users/usm/Desktop/OGLTest/MainWin.cpp:12
Object::connect:  (receiver name: 'MainWinClass')

我读过的教程似乎都没有任何帮助,而且我确信对于更有经验的人来说修复很简单。

谢谢。

【问题讨论】:

为了清楚起见,请写“Qt”而不是“QT”。谢谢 【参考方案1】:

你有吗

class GLWidget : public QGLWidget 

   Q_OBJECT

   /* ... rest of declaration ... */

;

在你的班级声明中?您是否将 glwidget.h 标头放入 .pro 文件的 HEADERS 部分?信号的实现由 moc 完成,而不是你。

【讨论】:

啊,是的,我把 Q_OBJECT 放在类声明中,我还需要在重新编译之前运行 qmake。谢谢! 这也应该消除信号声明后对大括号的需要,因为 moc 现在应该为您生成一个实现。

以上是关于Qt4 插槽和信号:Qt4 无法找到信号的主要内容,如果未能解决你的问题,请参考以下文章

Qt4 现有插槽无法识别

C++ 和 QT4.5 - 传递 const int& 过大?通过引用传递是不是有助于信号/插槽?

Qt Jambi (Qt4Dotnet):区分插槽中的信号发射器

Qt4 中的信号和槽

Qt 4.8:来自不同线程的两个信号和一个插槽之间的连接行为

在 moveToThread() 之后未调用 Qt 4.8 信号/插槽