我是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:
顺便提一下有没有调试信号的方法? 即我怎么能确定发出信号?
答案 0 :(得分:6)
至少应该是Q_OBJECT。我想你还需要继承QMainWindow。
答案 1 :(得分:3)
这是一个很长的镜头,但你确定调用onDeviceChange()方法吗?
修改
在其正文中具有Q_OBJECT宏的类需要直接或间接地从QObject继承,并且在您的代码中不是这种情况。
答案 2 :(得分:2)
如果出现连接问题,请务必检查控制台是否有关于连接失败的消息。由于Qt无法判断连接是否有意义,直到运行时,它会通知您那里的故障。你会认为它会崩溃,但它只是在控制台中悄悄地说出这些东西。
使用Qt,始终观看控制台是有意义的。 Qt打印出各种错误消息,这些消息可以在您遇到问题时提供帮助。
答案 3 :(得分:0)
尝试改变信号virtual void
,确保您的MainWindow类继承({1}}
修改
正如其他评论中所提到的,宏应该是Q_OBJECT