您好,我在 qt 中遇到了信号和槽的问题。 在 main 中,我创建了主窗口的对象。 在 mainwindow.cpp 中,我创建了另一个类(modbus_tcp)的对象。 我也在这里创建连接
void MainWindow::on_ConnectB_clicked()
{
modbus_tcp appts;
appts.slave();
connect(&appts,SIGNAL(msgSended(QString)),this,SLOT(msgEdit(QString)));
}
在 mainwindow.cpp/h 中声明的插槽之间
public slots:
void msgEdit(QString m);
void MainWindow::msgEdit(QString m)
{
ui->sendEdit->setText(m);
ui->recvEdit->setText(m);
//QMessageBox::information(0,"bad", "nope nope nope");
}
和在 modbus_tcp.h 中声明的信号
signals:
void msgSended(QString);
接下来我在 modbus_tcp.cpp 中发射信号
emit msgSended("asdasd");
什么也没发生
当我试图在 mainwindow.cpp 中发出它的工作时
有什么想法吗?
最佳答案
void MainWindow::on_ConnectB_clicked()
{
modbus_tcp appts;
appts.slave();
connect(&appts,SIGNAL(msgSended(QString)),this,SLOT(msgEdit(QString)));
}
appts
是在栈中创建的,所以它会在槽执行结束时被删除。尝试在堆中创建它(尝试使用指针)。
void MainWindow::on_ConnectB_clicked()
{
modbus_tcp *appts = new modbus_tcp;
connect(appts,SIGNAL(msgSended(QString)),this,SLOT(msgEdit(QString)));//first!
appts->slave();//now you can call it
}
使用指针,但首先是connect
,然后调用slave
。你在slave
发出信号,但是此时没有连接。您应该先进行连接,然后才能捕获信号。
关于c++ - QT 插槽和信号失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345950/