summaryrefslogtreecommitdiffstats
path: root/examples/corelib
diff options
context:
space:
mode:
authorRym Bouabid <rym.bouabid@qt.io>2023-09-19 12:49:14 +0200
committerRym Bouabid <rym.bouabid@qt.io>2023-10-06 19:40:23 +0200
commita8e8a77bc51fc87a5f3c4fec71070b5534659ad8 (patch)
tree40933fa105703237750875e34c6c8428a5b97b9c /examples/corelib
parent0c4b2779ff1c41bbcae33960313d764a91757596 (diff)
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>
Diffstat (limited to 'examples/corelib')
-rw-r--r--examples/corelib/ipc/doc/images/localfortuneserver-example.pngbin5715 -> 14948 bytes
-rw-r--r--examples/corelib/ipc/localfortuneserver/server.cpp86
-rw-r--r--examples/corelib/ipc/localfortuneserver/server.h12
3 files changed, 77 insertions, 21 deletions
diff --git a/examples/corelib/ipc/doc/images/localfortuneserver-example.png b/examples/corelib/ipc/doc/images/localfortuneserver-example.png
index 2f04c7528e..778c7c85b0 100644
--- a/examples/corelib/ipc/doc/images/localfortuneserver-example.png
+++ b/examples/corelib/ipc/doc/images/localfortuneserver-example.png
Binary files differ
diff --git a/examples/corelib/ipc/localfortuneserver/server.cpp b/examples/corelib/ipc/localfortuneserver/server.cpp
index dcf13b0f37..77322e03bd 100644
--- a/examples/corelib/ipc/localfortuneserver/server.cpp
+++ b/examples/corelib/ipc/localfortuneserver/server.cpp
@@ -3,32 +3,33 @@
#include "server.h"
+#include <QDialogButtonBox>
#include <QGuiApplication>
#include <QHBoxLayout>
#include <QLabel>
+#include <QLineEdit>
#include <QLocalSocket>
#include <QMessageBox>
#include <QPushButton>
#include <QRandomGenerator>
+using namespace Qt::StringLiterals;
+
+static const QString idleStateText = QObject::tr("Press \"Listen\" to start the server");
+
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);
- 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->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.")
<< 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("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"));
quitButton->setAutoDefault(false);
connect(quitButton, &QPushButton::clicked, this, &Server::close);
- connect(server, &QLocalServer::newConnection, this, &Server::sendFortune);
- QHBoxLayout *buttonLayout = new QHBoxLayout;
- buttonLayout->addStretch(1);
- buttonLayout->addWidget(quitButton);
- buttonLayout->addStretch(1);
+ QDialogButtonBox *buttonBox = new QDialogButtonBox;
+ buttonBox->addButton(listenButton, QDialogButtonBox::ActionRole);
+ buttonBox->addButton(stopListeningButton, QDialogButtonBox::ActionRole);
+ buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
- QVBoxLayout *mainLayout = new QVBoxLayout(this);
- mainLayout->addWidget(statusLabel);
- mainLayout->addLayout(buttonLayout);
+ QGridLayout *mainLayout = new QGridLayout(this);
+ mainLayout->addWidget(hostLabel, 0, 0);
+ mainLayout->addWidget(hostLineEdit, 0, 1);
+ mainLayout->addWidget(statusLabel, 2, 0, 3, 2);
+ mainLayout->addWidget(buttonBox, 10, 0, 2, 2);
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()
diff --git a/examples/corelib/ipc/localfortuneserver/server.h b/examples/corelib/ipc/localfortuneserver/server.h
index 1aa63c8d22..1efba8fca9 100644
--- a/examples/corelib/ipc/localfortuneserver/server.h
+++ b/examples/corelib/ipc/localfortuneserver/server.h
@@ -6,7 +6,10 @@
#include <QApplication>
#include <QDialog>
+#include <QLabel>
+#include <QLineEdit>
#include <QLocalServer>
+#include <QPushButton>
class Server : public QDialog
{
@@ -17,8 +20,17 @@ public:
private:
void sendFortune();
+ void toggleListenButton();
+ void listenToServer();
+ void stopListening();
+
QLocalServer *server;
+ QLineEdit *hostLineEdit;
+ QLabel *statusLabel;
+ QPushButton *listenButton;
+ QPushButton *stopListeningButton;
QStringList fortunes;
+ QString name;
};
#endif