gpt4 book ai didi

c++ - QT 插槽和信号失败

转载 作者:行者123 更新时间:2023-11-30 04:00:22 26 4
gpt4 key购买 nike

您好,我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com