Revamp Local Fortune Server Example: Allow specifying the server name
The server used to hardcode the name while the client allows the user to specify it. The server's UI is adjusted to let the user first specify the server name he wants to listen to and second stop listening to the current server. Task-number: QTBUG-117064 Pick-to: 6.6 6.5 Change-Id: I80fc976151ead7a181fbc32080597277bc515313 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
This commit is contained in:
parent
0c4b2779ff
commit
a8e8a77bc5
Binary file not shown.
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 15 KiB |
@ -3,32 +3,33 @@
|
|||||||
|
|
||||||
#include "server.h"
|
#include "server.h"
|
||||||
|
|
||||||
|
#include <QDialogButtonBox>
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QLineEdit>
|
||||||
#include <QLocalSocket>
|
#include <QLocalSocket>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QRandomGenerator>
|
#include <QRandomGenerator>
|
||||||
|
|
||||||
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
|
static const QString idleStateText = QObject::tr("Press \"Listen\" to start the server");
|
||||||
|
|
||||||
Server::Server(QWidget *parent)
|
Server::Server(QWidget *parent)
|
||||||
: QDialog(parent)
|
: QDialog(parent),
|
||||||
|
server(new QLocalServer(this)),
|
||||||
|
hostLineEdit(new QLineEdit(u"fortune"_s)),
|
||||||
|
statusLabel(new QLabel(idleStateText)),
|
||||||
|
listenButton(new QPushButton(tr("Listen"))),
|
||||||
|
stopListeningButton(new QPushButton(tr("Stop Listening")))
|
||||||
{
|
{
|
||||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||||
|
|
||||||
server = new QLocalServer(this);
|
|
||||||
if (!server->listen("fortune")) {
|
|
||||||
QMessageBox::critical(this, tr("Local Fortune Server"),
|
|
||||||
tr("Unable to start the server: %1.")
|
|
||||||
.arg(server->errorString()));
|
|
||||||
close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QLabel *statusLabel = new QLabel;
|
|
||||||
statusLabel->setWordWrap(true);
|
statusLabel->setWordWrap(true);
|
||||||
statusLabel->setText(tr("The server is running.\n"
|
|
||||||
"Run the Local Fortune Client example now."));
|
stopListeningButton->setDisabled(true);
|
||||||
|
|
||||||
fortunes << tr("You've been leading a dog's life. Stay off the furniture.")
|
fortunes << tr("You've been leading a dog's life. Stay off the furniture.")
|
||||||
<< tr("You've got to think about tomorrow.")
|
<< tr("You've got to think about tomorrow.")
|
||||||
@ -38,21 +39,64 @@ Server::Server(QWidget *parent)
|
|||||||
<< tr("You cannot kill time without injuring eternity.")
|
<< tr("You cannot kill time without injuring eternity.")
|
||||||
<< tr("Computers are not intelligent. They only think they are.");
|
<< tr("Computers are not intelligent. They only think they are.");
|
||||||
|
|
||||||
|
QLabel *hostLabel = new QLabel(tr("Server name:"));
|
||||||
|
|
||||||
|
connect(server, &QLocalServer::newConnection, this, &Server::sendFortune);
|
||||||
|
connect(hostLineEdit, &QLineEdit::textChanged, this, &Server::toggleListenButton);
|
||||||
|
connect(listenButton, &QPushButton::clicked, this, &Server::listenToServer);
|
||||||
|
connect(stopListeningButton, &QPushButton::clicked,this, &Server::stopListening);
|
||||||
|
|
||||||
QPushButton *quitButton = new QPushButton(tr("Quit"));
|
QPushButton *quitButton = new QPushButton(tr("Quit"));
|
||||||
quitButton->setAutoDefault(false);
|
quitButton->setAutoDefault(false);
|
||||||
connect(quitButton, &QPushButton::clicked, this, &Server::close);
|
connect(quitButton, &QPushButton::clicked, this, &Server::close);
|
||||||
connect(server, &QLocalServer::newConnection, this, &Server::sendFortune);
|
|
||||||
|
|
||||||
QHBoxLayout *buttonLayout = new QHBoxLayout;
|
QDialogButtonBox *buttonBox = new QDialogButtonBox;
|
||||||
buttonLayout->addStretch(1);
|
buttonBox->addButton(listenButton, QDialogButtonBox::ActionRole);
|
||||||
buttonLayout->addWidget(quitButton);
|
buttonBox->addButton(stopListeningButton, QDialogButtonBox::ActionRole);
|
||||||
buttonLayout->addStretch(1);
|
buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
|
||||||
|
|
||||||
QVBoxLayout *mainLayout = new QVBoxLayout(this);
|
QGridLayout *mainLayout = new QGridLayout(this);
|
||||||
mainLayout->addWidget(statusLabel);
|
mainLayout->addWidget(hostLabel, 0, 0);
|
||||||
mainLayout->addLayout(buttonLayout);
|
mainLayout->addWidget(hostLineEdit, 0, 1);
|
||||||
|
mainLayout->addWidget(statusLabel, 2, 0, 3, 2);
|
||||||
|
mainLayout->addWidget(buttonBox, 10, 0, 2, 2);
|
||||||
|
|
||||||
setWindowTitle(QGuiApplication::applicationDisplayName());
|
setWindowTitle(QGuiApplication::applicationDisplayName());
|
||||||
|
hostLineEdit->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Server::listenToServer()
|
||||||
|
{
|
||||||
|
name = hostLineEdit->text();
|
||||||
|
if (!server->listen(name)) {
|
||||||
|
QMessageBox::critical(this, tr("Local Fortune Server"),
|
||||||
|
tr("Unable to start the server: %1.")
|
||||||
|
.arg(server->errorString()));
|
||||||
|
name.clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
statusLabel->setText(tr("The server is running.\n"
|
||||||
|
"Run the Local Fortune Client example now."));
|
||||||
|
toggleListenButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Server::stopListening()
|
||||||
|
{
|
||||||
|
server->close();
|
||||||
|
name.clear();
|
||||||
|
statusLabel->setText(idleStateText);
|
||||||
|
toggleListenButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Server::toggleListenButton()
|
||||||
|
{
|
||||||
|
if (server->isListening()) {
|
||||||
|
listenButton->setDisabled(true);
|
||||||
|
stopListeningButton->setEnabled(true);
|
||||||
|
} else {
|
||||||
|
listenButton->setEnabled(!hostLineEdit->text().isEmpty());
|
||||||
|
stopListeningButton->setDisabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::sendFortune()
|
void Server::sendFortune()
|
||||||
|
@ -6,7 +6,10 @@
|
|||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QLineEdit>
|
||||||
#include <QLocalServer>
|
#include <QLocalServer>
|
||||||
|
#include <QPushButton>
|
||||||
|
|
||||||
class Server : public QDialog
|
class Server : public QDialog
|
||||||
{
|
{
|
||||||
@ -17,8 +20,17 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void sendFortune();
|
void sendFortune();
|
||||||
|
void toggleListenButton();
|
||||||
|
void listenToServer();
|
||||||
|
void stopListening();
|
||||||
|
|
||||||
QLocalServer *server;
|
QLocalServer *server;
|
||||||
|
QLineEdit *hostLineEdit;
|
||||||
|
QLabel *statusLabel;
|
||||||
|
QPushButton *listenButton;
|
||||||
|
QPushButton *stopListeningButton;
|
||||||
QStringList fortunes;
|
QStringList fortunes;
|
||||||
|
QString name;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user