2014-10-13 3 views
1

안녕하세요. Qt의 신호 및 슬롯에 문제가 있습니다. 주에서 나는 mainwindow의 목표를 창조했다. mainwindow.cpp의 은 다른 클래스 (modbus_tcp)의 객체를 생성합니다. 또한 mainwindow.cpp 선언 슬롯/H 사이 여기QT 슬롯 및 신호가 실패합니다.

void MainWindow::on_ConnectB_clicked() 
{ 

    modbus_tcp appts; 
    appts.slave(); 
    connect(&appts,SIGNAL(msgSended(QString)),this,SLOT(msgEdit(QString))); 
} 

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"); 
} 

을 연결을 만들고

signals: 
void msgSended(QString); 

다음 난 modbus_tcp에 신호를 내뿜는 냉온 modbus_tcp.h

선언 신호를 출력한다. cpp

emit msgSended("asdasd"); 

내가 mainwindow.cpp에서 방출하려고 할 때 아무것도

을 일어나지는

어떤 아이디어를 작업?

답변

2
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에 신호를 내 보았으나 이번에는 아무런 연결도 없습니다. 당신은 먼저 연결을해야하고 그 후에 신호를 잡을 수 있습니다.

+0

바뀌 었습니다. 방출 할 때 슬레이브 기능을 편집하여 추가하겠습니다. – Edgarth

+0

@ Edgarth가 제 편집을 참조하십시오. – Chernobyl

+0

정말 고맙습니다;) 도움이되었습니다. – Edgarth