qt c++ 实现服务注册、发布服务,最后被成功后回调

在Qt中实现服务注册、发布服务,并在服务成功发布后执行回调,可以通过使用Qt的QLocalServerQLocalSocket来实现本地服务通信,或者使用网络服务如QTcpServerQTcpSocket进行网络服务的发布与发现。这里我们以本地服务为例来说明。

实现本地服务注册与发布

本地服务(也称为命名管道或Unix域套接字)允许同一台计算机上的进程间通信。以下是一个简化的例子,展示如何创建一个本地服务并发布,当服务成功启动时执行回调函数。

 

Cpp

深色版本

1#include <QCoreApplication>
2#include <QLocalServer>
3#include <QLocalSocket>
4#include <QTimer>
5
6class LocalService : public QObject {
7    Q_OBJECT
8public:
9    LocalService(QObject *parent = nullptr) : QObject(parent) {
10        server = new QLocalServer(this);
11        connect(server, &QLocalServer::newConnection, this, &LocalService::onNewConnection);
12        connect(server, &QLocalServer::serverErrorOccurred, this, &LocalService::onServerError);
13    }
14
15    bool start(const QString &serviceName) {
16        if (!server->listen(serviceName)) {
17            if (server->serverError() == QAbstractSocket::AddressInUseError) {
18                // 如果服务名已被占用,尝试删除旧的服务
19                QLocalServer::removeServer(serviceName);
20                if (!server->listen(serviceName)) {
21                    qCritical() << "Cannot start service:" << server->errorString();
22                    return false;
23                }
24            } else {
25                qCritical() << "Unknown error starting service:" << server->errorString();
26                return false;
27            }
28        }
29        // 成功启动服务后,触发回调
30        emit serviceStarted();
31        return true;
32    }
33
34signals:
35    void serviceStarted();
36
37private slots:
38    void onNewConnection() {
39        QLocalSocket *clientConnection = server->nextPendingConnection();
40        // 这里可以处理新的连接,例如读写数据
41    }
42
43    void onServerError(QLocalServer::SocketError error) {
44        qCritical() << "Server error occurred:" << error;
45    }
46
47private:
48    QLocalServer *server;
49};
50
51// 回调函数示例
52void onServiceStarted() {
53    qDebug() << "Service started successfully!";
54}
55
56int main(int argc, char *argv[]) {
57    QCoreApplication a(argc, argv);
58
59    LocalService service;
60    if (service.start("MyUniqueService")) {
61        // 连接到服务启动成功的信号
62        QObject::connect(&service, &LocalService::serviceStarted, &onServiceStarted);
63    } else {
64        return -1;
65    }
66
67    return a.exec();
68}

在这个例子中,我们定义了一个LocalService类,用于创建和管理本地服务。当调用start方法尝试启动服务时,如果服务名已被占用,会尝试先移除旧的服务再重新启动。服务成功启动后,会发出serviceStarted信号,我们可以在主程序中连接这个信号到自定义的回调函数onServiceStarted,以执行服务启动后的逻辑。

请注意,这只是一个基本示例,实际应用中可能需要更复杂的逻辑处理,比如数据的读写、错误处理、安全验证等。

C++ Qt是一种流行的GUI开发框架,它结合了C++语言的强大性能和Qt库的丰富功能。在Qt回调函数是一种常见的编程模式,用于实现事件处理和信号与槽机制回调函数是指在特定事件发生时被调用的函数。在Qt回调函数通常用于处理用户界面的事件,例如按钮点击、菜单选择等。当这些事件发生时,Qt会自动调用相应的回调函数来执行特定的操作。 在C++ Qt回调函数可以通过以下几种方式实现: 1. 普通函数指针:可以将一个普通的C++函数指针作为回调函数传递给Qt的信号与槽机制。当信号触发时,Qt会调用该函数指针所指向的函数。 2. 函数对象:可以使用C++的函数对象(Functor)作为回调函数。函数对象是一个类对象,重载了函数调用运算符(),可以像函数一样被调用。在Qt,可以将函数对象作为回调函数传递给信号与槽机制。 3. Lambda表达式:C++11引入了Lambda表达式,它可以方便地定义匿名函数。在Qt,可以使用Lambda表达式作为回调函数,直接在信号与槽连接语句定义并传递Lambda表达式。 下面是一个简单的示例,演示了如何在C++ Qt使用回调函数: ```cpp #include <QApplication> #include <QPushButton> // 普通函数作为回调函数 void myFunction() { qDebug() << "Button clicked!"; } int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton button("Click me!"); QObject::connect(&button, &QPushButton::clicked, myFunction); button.show(); return app.exec(); } ``` 在上面的示例,我们创建了一个QPushButton按钮,并将其clicked信号与myFunction函数进行连接。当按钮被点击时,myFunction函数会被调用,并输出一条消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季截

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值