Я не понимаю, почему этот код не работает, возможно, я не понимаю концепцию SIGNAL и SLOT.C++ - QT - понимание SIGNAL и SLOT
Например: У меня есть класс с именем MainWindow
, этот класс содержит компоненты ui. В этом пользовательском интерфейсе я могу запустить и закрыть локальный сервер. Этот сервер определен в классе MyServer
. Класс MainWindow
имеет ссылку на MyServer class '&myServer'
. Если я это сделать в классе mainwindow.cpp
это работает:
connect(ui->startServer,SIGNAL(clicked()),&myServer,SLOT(startServer()));
connect(ui->shutdownServer,SIGNAL(clicked()),&myServer,SLOT(shutDownServer()));
, но эта линия не:
connect(&myServer,SIGNAL(signalMessage()), this, SLOT(slotUpdate()));
Эта проблема является: У меня есть сигнал под названием void signalMessage();
в классе MyServer, этот сигнал называется функция void startServer();
и void shutDownServer()
signals:
void signalMessage();
Обычно после вызова singalMessage()
в MyServer
класса, функц ион slotUpdate()
в классе MainWindow
. Но вызывается только signalMessage()
, а не slotUpadate()
.
Я надеюсь, что кто-нибудь поймет мою проблему. Я могу определить слот и сигнал от MainWindow до MyServer, но не наоборот. :(
Edit: Окей, вот некоторый код для понимания моей проблемы:
mainwindow.h
...
public:
Ui::MainWindow *ui;
MyServer myServer;
public slots:
void slotUpdate();
...
mainwindow.cpp
...
connect(ui->startServer,SIGNAL(clicked()),&myServer,SLOT(startServer()));
connect(ui->shutdownServer,SIGNAL(clicked()),&myServer,SLOT(shutDownServer()));
connect(&myServer,SIGNAL(signalMessage()), this, SLOT(slotUpdate()));
...
void MainWindow::slotUpdate()
{
qDebug()<< "update()";
}
...
myserver.h
public slots:
void startServer();//start the server on 127.0.0.1 port: 1234
void shutDownServer();//disconnect threads, shut down server
signals:
void signalMessage();
myserver.cpp
...
void MyServer::startServer(){
if(!this->listen(QHostAddress::Any,1234)){
message.append("Could not start server, because server is already running");
}else{
message.append("Listening...");
}
emit signalMessage();
}
...
void MyServer::signalMessage()
{
qDebug() << "getMessage()";
}
с «сигналом называется», вы имеете в виду, что вы «испускаете» его, правильно? –
да, я написал «emit signalMessage();» – user1895683
Можете ли вы показать еще какой-нибудь код с соответствующими частями (особенно определениями слотов и сигналов) из вашего файла '.h'? Когда вы запускаете отладочную сборку вашего приложения из командной строки, получаете ли вы какой-либо вывод, например «Нет такого слота»? –