繁体   English   中英

QT插槽和信号失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM