[英]QT slots and signals fail
嗨,我在qt中遇到信号和插槽问题。 我主要创建了mainwindow的对象。 在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
发出信号,但是此时没有连接。 您应该先进行连接,然后才能捕获信号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.