我有一个非常简单的服务器应用程序,它在控制台中完美运行。现在我切换到 gui 并创建了一个新项目,几乎所有的东西都和控制台项目一样。差异之一是显示我的输出的方式。而不是qDebug() << "Hello abc";
我现在必须使用ui->textBrowser->append("Hello abc");
. 这个 ui 只能在 mainwindow.cpp 中调用。
#include "mainwindow.h"
#include "myserver.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::AppendToBrowser(const QString text)
{
ui->textBrowser->append(text);
}
void MainWindow::on_startButton_clicked()
{
MyServer* mServer = new MyServer;
connect(mServer, SIGNAL(updateUI(const QString)), this, SLOT(AppendToBrowser(const QString)));
}
在 MyServer.cpp 中,我必须使用 connect 函数(见上文)并将信号 updateUI 发送到 mainwindow.cpp。
#include "myserver.h"
#include "mainwindow.h"
MyServer::MyServer(QObject *parent) :
QObject(parent)
{
server = new QTcpServer(this);
connect(server,SIGNAL(newConnection()), this, SLOT(newConnection()));
if(!server->listen(QHostAddress::Any,1234))
{
emit updateUI("Server Error");
}
else
{
emit updateUI("Server started");
}
}
void MyServer::newConnection()
{
QTcpSocket *socket = server->nextPendingConnection();
socket->write("Hello client!");
socket->flush();
socket->waitForBytesWritten(3000);
socket->close();
emit updateUI("Socket closed");
}
问题来了:我的文本浏览器只显示最后一个发出命令“套接字关闭”。我调试程序,点击启动按钮(启动服务器并将信号(updateUI)与插槽(appendToBrowser)连接)并通过telnet连接到程序。到目前为止,该程序运行良好,我在 telnet 上看到“hello client”和退出,但仍然只有最后一个发出输出来自“Socked Closed”。一开始我认为我的发射可能会相互覆盖,但那是不可能的,因为在我单击 startButton 后应该看到“服务器已启动”或“服务器错误”。
任何想法如何解决这个问题?我现在正在使用 c++ 和 qt 大约 3 周,我必须承认我很快就很困惑,所以我希望你们能理解我的问题!谢谢到目前为止。