Qt中A类发射信号,B类的槽无法收到的问题
做了一个键盘类KeyBoard.实现点击按键发送信号
class KeyBoard : public QWidget
{
Q_OBJECT
signals:
void clickedKey(int keyNum);
}
在类B中实例化KeyBoard,并连接KeyBoard的信号和B类的槽函数
class B : public QWidget
{
Q_OBJECT
public slots:
void slotGetKeyNum(int num);
};
B::B(QWidget *parent) : QWidget(parent), ui(new Ui::B)
{
KeyBoard keyboard;
connect(&keyboard,SIGNAL(clickedKey(int)),this,SLOT(slotGetKeyNum(int)));
ui->setupUi(this);
}
void B::slotGetKeyNum(int num)
{
int keynum;
keynum = num;
}
然后在main函数中实例化类B
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
B b;
b.show();
return a.exec();
};
断点调试,点击按键发射信号后函数slotGetKeyNum未被调用,求教……
[解决办法]
KeyBoard keyboard;局部对象,构造函数执行完了, keyboard;就析构了吧
[解决办法]
KeyBoard keyboard是局部变量了,你这要把keyboard这次B的的类成员变量,让他的生命周期和B一样,才能b存在时正常接收到信号
[解决办法]
再有就是,你的 KeyBoard 类和 B 类斗继承自QWidget,但是我不知道你是使用的哪个做主窗体,只要你的KeyBoard实例化之后,没有在界面上(被鼠标选中)作为活动窗体,你的键盘事件是无法让它接收到的,那么它也不会发射任何你想要借此映射出来的鼠标事件消息的。