无法连接QT信号

时间:2010-12-16 16:48:54

标签: c++ qt4 signals-slots

我是QT的新手并且正在尝试创建一个自定义信号,告诉我已插入可移动磁盘。 这就是我做的

MainWindow.h

class MainWindow
{   
    QOBJECT
    ..
    ..
    signals:
    void qm_diskInserted(QString &);
    public slots:
    void addItemToList(QString &);
    ...
}

MainWindow.cpp

void MainWindow::onDeviceChange(MSG * msg)
{
   //code for detecting device here
   QString &driveLetter= getDriveLetter(mask);
   //try to emit QT signal here
   emit qm_diskInserted(driveLetter);
}
MainWindow::MainWindow(QWidget * parent=NULL)
{
   ui.setupUi(this);
   QObject::connect(this, SIGNAL(qm_diskInserted(QString&)), this, SLOT(addItemToList(QString &));
}
void MainWindow::addItemToList(QString &)
{
   //more stuff here
}

以某种方式调用插槽 addItemToList(),我必须手动调用它。
 我做错了什么?

感谢。 PS:

顺便提一下有没有调试信号的方法? 即我怎么能确定发出信号?

4 个答案:

答案 0 :(得分:6)

至少应该是Q_OBJECT。我想你还需要继承QMainWindow。

答案 1 :(得分:3)

这是一个很长的镜头,但你确定调用onDeviceChange()方法吗?

修改

在其正文中具有Q_OBJECT宏的类需要直接或间接地从QObject继承,并且在您的代码中不是这种情况。

答案 2 :(得分:2)

如果出现连接问题,请务必检查控制台是否有关于连接失败的消息。由于Qt无法判断连接是否有意义,直到运行时,它会通知您那里的故障。你会认为它会崩溃,但它只是在控制台中悄悄地说出这些东西。

使用Qt,始终观看控制台是有意义的。 Qt打印出各种错误消息,这些消息可以在您遇到问题时提供帮助。

答案 3 :(得分:0)

尝试改变信号virtual void,确保您的MainWindow类继承({1}}

(直接或间接)

修改

正如其他评论中所提到的,宏应该是Q_OBJECT