我不明白为什么这段代码不起作用,也许我还没有理解 SIGNAL 和 SLOT 的概念。
例如:我有一个名为 的类MainWindow
,该类包含 ui 组件。在这个 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
函数。但 only被称为而不是。slotUpdate()
MainWindow
signalMessage()
slotUpadate()
我希望有人能理解我的问题。我可以定义从 MainWindow 到 MyServer 的插槽和信号,但不能反向。:(
编辑:好的,这里有一些代码可以理解我的问题:
主窗口.h
...
public:
Ui::MainWindow *ui;
MyServer myServer;
public slots:
void slotUpdate();
...
主窗口.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()";
}
...
我的服务器.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();
我的服务器.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()";
}