qt c emit textbrowser

У меня было очень простое серверное приложение, которое отлично работало в консоли.
Теперь я переключился на графический интерфейс и создал новый проект, в котором почти все, как в консольном проекте.
Одним из различий является способ отображения моего вывода. Вместо qDebug() << "Hello abc"; Теперь я должен использовать ui->textBrowser->append("Hello abc");,
Этот пользовательский интерфейс может быть вызван только в 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 я должен использовать функцию соединения (см. Выше) и передать сигнал 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");
}

Здесь возникает проблема: мой текстовый браузер делает ТОЛЬКО отобразить последнюю команду emit «Socket closed». Я отлаживаю программу, нажимаю кнопку запуска (которая запускает сервер и соединяет сигнал (updateUI) со слотом (appendToBrowser)) и подключаюсь к программе через telnet.
Программа работает нормально, так что я вижу «привет клиент» и завершение работы по telnet, но все же, только последний вывод emit проходит через «Socked Closed».
В самый первый момент я подумал, что мои испускаемые файлы могут перекрывать друг друга, но это невозможно, потому что «Сервер запущен» или «Ошибка сервера» должны отображаться сразу после нажатия кнопки «Пуск».

Есть идеи как решить это? Я работаю с c ++ и qt уже около 3 недель и должен признать, что очень быстро запутался, поэтому надеюсь, что вы, ребята, поймете мою проблему! пока спасибо.

0

Решение

Что ж, это нормально, если вы устанавливаете соединение в конструкторе MyServer, вы еще не подключили его сигнал к главному окну, поэтому оно не будет отображать ничего.

Основным исправлением было бы переместить код соединения (по крайней мере, часть if / else) в метод и вызвать этот метод после соединения вещей в вашем слоте MainWindow :: on_startButton_clicked () …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]