QT槽和信号故障

QT slots and signals fail

本文关键字:故障 信号 QT      更新时间:2023-10-16

嗨,qt中的信号和插槽有问题。我主要创建了主窗口的对象。在mainwindow.cpp中,我创建了另一个类的对象(modbus_tcp)。我还在这里创建连接

void MainWindow::on_ConnectB_clicked()
{
    modbus_tcp appts;
    appts.slave();
    connect(&appts,SIGNAL(msgSended(QString)),this,SLOT(msgEdit(QString)));
}

在主窗口.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);

下一个i在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中发出信号,但此时没有连接。你应该先进行连接,然后才能捕捉到信号。