太原网站建设加q.479185700网络营销专业介绍及就业方向
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:23
当前位置: 首页 > news >正文
太原网站建设加q.479185700,网络营销专业介绍及就业方向,北京保障房建设网站,德兴网站seoQT项目_RPC(进程间通讯) 前言#xff1a; 两个进程间通信、或是说两个应用程序之间通讯。实际情况是在QT开发的一个项目中#xff0c;里面包含两个子程序#xff0c;子程序有单独的界面和应用逻辑#xff0c;这两个子程序跑起来之后需要一些数据的交互#xff0c;例如 两个进程间通信、或是说两个应用程序之间通讯。实际情况是在QT开发的一个项目中里面包含两个子程序子程序有单独的界面和应用逻辑这两个子程序跑起来之后需要一些数据的交互例如一个程序是用户界面和用户程序另一个程序时OSD菜单 注意RPC通讯传输的数据类型有bool、int和std::string(QString不行) 效果演示 1、移植RCP源码到自己工程 ①移植RPC说白了就是两个文件夹里面有N多个源文件直接复制过来直接用需要自行修改.pro文件以便加入编译 # rest_rpc INCLUDEPATH $\(PWD/msgpack DEPENDPATH \)$PWD/msgpack②工程目录 2、源码展示 test_rpc.pro TEMPLATE subdirsSUBDIRS \apply \layer apply/apply.pro QT quick \widgetsCONFIG c11# The following define makes your compiler emit warnings if you use
any Qt feature that has been marked deprecated (the exact warnings
depend on your compiler). Refer to the documentation for the
deprecated API to know how to port your code away from it.
DEFINES QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
In order to do so, uncomment the following line.
You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES \main.cpp \mainwidget.cpp \rpc/MessageTip.cpp \rpc/RPCClient.cpp \rpc/RPCServer.cppRESOURCES qml.qrc# Additional import path used to resolve QML modules in Qt Creators code model QML_IMPORT_PATH # Additional import path used to resolve QML modules just for Qt Quick Designer QML_DESIGNER_IMPORT_PATH # Default rules for deployment. qnx: target.path /tmp/$\({TARGET}/bin else: unix:!android: target.path /opt/\)\({TARGET}/bin !isEmpty(target.path): INSTALLS target# rest_rpc INCLUDEPATH \)\(PWD/msgpack DEPENDPATH \)$PWD/msgpackHEADERS \mainwidget.h \rpc/MessageTip.h \rpc/RPCClient.h \rpc/RPCServer.h apply/Headers/rpc/MessageTip.h #ifndef MESSAGETIP_H #define MESSAGETIP_H#include qstring.hnamespace MessageTip {void onApplyvalueChanged(int value);void onApplystringChanged(std::string value); }#endif // MESSAGETIP_H apply/Headers/rpc/RPCClient.h #ifndef RPCCLIENT_H #define RPCCLIENT_H#include rest_rpc/rpc_client.hppclass RPCClient { public:RPCClient();static RPCClient get_instance(){static RPCClient manage;return manage;}/** brief 尝试连接RPC Server* return true 连接成功false 连接失败*/void tryConnect();rest_rpc::rpc_client *getSocketObject();private:rest_rpc::rpc_client *m_pClient nullptr; };#endif // RPCCLIENT_H apply/Headers/rpc/RPCServer.h #ifndef RPCSERVER_H #define RPCSERVER_H#include qstring.h #include rest_rpc/rpc_server.husing namespace rest_rpc; using namespace rpc_service;class RPCServer { public:RPCServer();void setApplyvalue(rpc_conn conn , int value);void setApplystring(rpc_conn conn , std::string value); };#endif // RPCSERVER_H apply/Headers/mainwidget.h #ifndef MAINWIDGET_H #define MAINWIDGET_H#include QObject #include QWidget #include QQmlComponent #include QQmlApplicationEngine #include QQuickItem #include rpc/RPCServer.hclass MainWidget : public QObject {Q_OBJECT public:MainWidget();protected slots:void onClickPageNo(bool enable);void onApplyvalueChanged(int value);void onApplystringChanged(QString value);private:QQuickItem *m_applyItem nullptr;QObject *m_applyObject nullptr;RPCServer *m_pRPCServer nullptr; };#endif // MAINWIDGET_H apply/Sources/rpc/MessageTip.cpp #include MessageTip.h #include RPCClient.h #include qdebug.hvoid MessageTip::onApplyvalueChanged(int value) {try {RPCClient::get_instance()-getSocketObject()-callvoid(MessageTip::layervalueChanged, value);} catch (const std::exception e) {qDebug() Exception {}, e.what();} }void MessageTip::onApplystringChanged(std::string value) {try {RPCClient::get_instance()-getSocketObject()-callvoid(MessageTip::layerstringChanged, value);} catch (const std::exception e) {qDebug() Exception {}, e.what();} } apply/Sources/rpc/RPCClient.cpp #include RPCClient.h #include QtDebugRPCClient::RPCClient() {}void RPCClient::tryConnect() {m_pClient new rest_rpc::rpc_client(127.0.0.1, 9000);m_pClient-enable_auto_reconnect(true);m_pClient-connect();std::thread([] {while (true){if (m_pClient-has_connected()) {qDebug() apply RPC connect success;break;} else {qDebug() apply RPC connect fail;std::this_thread::sleep_for(std::chrono::milliseconds(500));}}}).detach(); }rest_rpc::rpc_client *RPCClient::getSocketObject() {return m_pClient; } apply/Sources/rpc/RPCServer.cpp #include RPCServer.h #include qdebug.hRPCServer::RPCServer() {std::thread([] {rpc_server server(9001, std::thread::hardware_concurrency());server.register_handler(MessageTip::setApplyvalue, RPCServer::setApplyvalue, this);server.register_handler(MessageTip::setApplystring, RPCServer::setApplystring, this);server.run();}).detach(); }void RPCServer::setApplyvalue(rpc_conn conn , int value) {//todoqDebug() apply recv : value; }void RPCServer::setApplystring(rpc_conn conn , std::string value) {//todoqDebug() apply recv : QString::fromStdString(value); } apply/Sources/main.cpp #include QGuiApplication #include QQmlApplicationEngine #include mainwidget.h #include qdebug.h #include qthread.hint main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication app(argc, argv);// QQmlApplicationEngine engine; // const QUrl url(QStringLiteral(qrc:/main.qml)); // QObject::connect(engine, QQmlApplicationEngine::objectCreated, // app, url { // if (!obj url objUrl) { // QCoreApplication::exit(-1); // } // }, Qt::QueuedConnection); // engine.load(url);MainWidget mainwidget;return app.exec(); } apply/Sources/mainwidget.cpp #include mainwidget.h #include qdebug.h #include rpc/RPCClient.h #include rpc/MessageTip.h #include QProcessMainWidget::MainWidget() {QQmlApplicationEngine *m_pEngine new QQmlApplicationEngine;QQmlComponent component(m_pEngine, QUrl(QStringLiteral(qrc:/main.qml)));QObject *mainObject component.create();if (mainObject nullptr) {qDebug() mainObject fail;return;}QListQObject * objectList mainObject-findChildrenQObject *(mybutton);if (objectList.isEmpty()) {qDebug() mybutton failed\n;return;}m_applyObject objectList.last();connect(m_applyObject, SIGNAL(applyvalueChanged(int)), this, SLOT(onApplyvalueChanged(int)));connect(m_applyObject, SIGNAL(applystringChanged(QString)), this, SLOT(onApplystringChanged(QString)));connect(mainObject, SIGNAL(window_interface(bool)), this, SLOT(onClickPageNo(bool)));m_pRPCServer new RPCServer();RPCClient::get_instance()-tryConnect(); }void MainWidget::onClickPageNo(bool enable) {QProcess *process new QProcess();process-start(/home/zhou/work/test/build-test_rpc-Desktop_Qt_5_14_2_GCC_64bit-Debug/layer/layer); }void MainWidget::onApplyvalueChanged(int value) {qDebug() onApplyvalueChanged value;MessageTip::onApplyvalueChanged(value); }void MainWidget::onApplystringChanged(QString value) {qDebug() onApplystringChanged value;MessageTip::onApplystringChanged(std::string(value.toLocal8Bit())); } apply/main.qml import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12Window {visible: truewidth: 640height: 480objectName: apply_windowtitle: qsTr(Hello apply)signal window_interface(bool enable)Column{anchors.fill: parentspacing: 20Button{width: 140height: 50text: 开启界面2onClicked: {window_interface(true)}}Mybutton{width: 140height: 300}} } apply/Mybutton.qml import QtQuick 2.0 import QtQuick.Controls 2.12Item {objectName: mybuttonsignal applyvalueChanged(int value)signal applystringChanged(string value)Column{spacing: 10Button{objectName: buttonwidth: 140height: 50text: send1onClicked: {applyvalueChanged(1)}}Button{width: 140height: 50text: send2onClicked: {applyvalueChanged(2)}}Button{width: 140height: 50text: 验证stringonClicked: {applystringChanged({\name:\lili\,\age:24,\class:6})}}} } layer.pro QT quick QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use
any Qt feature that has been marked deprecated (the exact warnings
depend on your compiler). Refer to the documentation for the
deprecated API to know how to port your code away from it.
DEFINES QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
In order to do so, uncomment the following line.
You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES \main.cpp \mainwidget.cpp \rpc/MessageTip.cpp \rpc/RPCClient.cpp \rpc/RPCServer.cppRESOURCES qml.qrc# Additional import path used to resolve QML modules in Qt Creators code model QML_IMPORT_PATH # Additional import path used to resolve QML modules just for Qt Quick Designer QML_DESIGNER_IMPORT_PATH # Default rules for deployment. qnx: target.path /tmp/$\({TARGET}/bin else: unix:!android: target.path /opt/\)\({TARGET}/bin !isEmpty(target.path): INSTALLS target# rest_rpc INCLUDEPATH \)\(PWD/msgpack DEPENDPATH \)$PWD/msgpackHEADERS \mainwidget.h \rpc/MessageTip.h \rpc/RPCClient.h \rpc/RPCServer.h layer/Headers/rpc/MessageTip.h #ifndef MESSAGETIP_H #define MESSAGETIP_H#include qstring.hnamespace MessageTip {void setApplyvalue(int value);void setApplystring(std::string value); }#endif // MESSAGETIP_H layer/Headers/rpc/RPCClient.h #ifndef RPCCLIENT_H #define RPCCLIENT_H#include rest_rpc/rpc_client.hppclass RPCClient { public:RPCClient();static RPCClient get_instance(){static RPCClient layer_manage;return layer_manage;}/** brief 尝试连接RPC Server* return true 连接成功false 连接失败*/void tryConnect();rest_rpc::rpc_client *getSocketObject();private:rest_rpc::rpc_client *m_pClient nullptr; };#endif // RPCCLIENT_H layer/Headers/rpc/RPCServer.h #ifndef RPCSERVER_H #define RPCSERVER_H#include QtDebug #include QThread #include QObject #include QQuickItem#include rest_rpc/rpc_server.h using namespace rest_rpc; using namespace rpc_service;class RPCServer : public QObject {Q_OBJECT public:explicit RPCServer(QObject *parent nullptr);void layervalueChanged(rpc_conn conn , int value);void layerstringChanged(rpc_conn conn , std::string value);protected:signals:private:QObject *m_pMainObject nullptr;QQuickItem *m_pOSDAreaItem nullptr; };#endif // RPCSERVER_H layer/Headers/mainwidget.h #ifndef MAINWIDGET_H #define MAINWIDGET_H#include QObject #include QQmlComponent #include QQmlApplicationEngine #include QQuickItem #include rpc/RPCServer.hclass mainwidget : public QObject {Q_OBJECT public:mainwidget();private:RPCServer *m_pRPCServer nullptr; };#endif // MAINWIDGET_H layer/Sources/rpc/MessageTip.cpp #include MessageTip.h #include RPCClient.h #include QtDebugvoid MessageTip::setApplyvalue(int value) {try {return RPCClient::get_instance()-getSocketObject()-callvoid(MessageTip::setApplyvalue, value);} catch (const std::exception e) {qDebug() setImageRotate exception e.what();} }void MessageTip::setApplystring(std::string value) {try {return RPCClient::get_instance()-getSocketObject()-callvoid(MessageTip::setApplystring, value);} catch (const std::exception e) {qDebug() setImageRotate exception e.what();} } layer/Sources/rpc/RPCClient.cpp #include RPCClient.h #include QtDebugRPCClient::RPCClient() {}void RPCClient::tryConnect() { //#if defined(__x86_64) // m_pClient new rest_rpc::rpc_client(192.168.31.95, 9001); //#elsem_pClient new rest_rpc::rpc_client(127.0.0.1, 9001); //#endifm_pClient-enable_auto_heartbeat(true);m_pClient-connect();std::thread([] {while (true){qDebug() layer RPC connect fail;if (m_pClient-has_connected()) {qDebug() layer RPC connect success;break;} else {std::this_thread::sleep_for(std::chrono::milliseconds(500));qDebug() layer RPC connect fail;}}}).detach(); }rest_rpc::rpc_client *RPCClient::getSocketObject() {return m_pClient; } layer/Sources/rpc/RPCServer.cpp #include RPCServer.h #include rpc/MessageTip.hRPCServer::RPCServer(QObject *parent) : QObject(parent) {QThread::create([] {rpc_server server(9000, std::thread::hardware_concurrency());server.register_handler(MessageTip::layervalueChanged, RPCServer::layervalueChanged, this);server.register_handler(MessageTip::layerstringChanged, RPCServer::layerstringChanged, this);server.run();})-start();qDebug() start rpc server; }void RPCServer::layervalueChanged(rpc_conn conn , int value) {//todoMessageTip::setApplyvalue(value);qDebug() APPLY SEND : value; }void RPCServer::layerstringChanged(rpc_conn conn , std::string value) {//todoMessageTip::setApplystring(value);qDebug() APPLY SEND : QString::fromStdString(value); } layer/Sources/main.cpp #include QGuiApplication #include QQmlApplicationEngine #include qdebug.h #include mainwidget.hint main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication app(argc, argv);// QQmlApplicationEngine engine; // const QUrl url(QStringLiteral(qrc:/main.qml)); // QObject::connect(engine, QQmlApplicationEngine::objectCreated, // app, url { // if (!obj url objUrl) { // QCoreApplication::exit(-1); // } // }, Qt::QueuedConnection); // engine.load(url);mainwidget mainwidget;return app.exec(); } layer/Sources/mainwidget.cpp #include mainwidget.h #include rpc/RPCClient.hmainwidget::mainwidget() {QQmlApplicationEngine *m_pEngine new QQmlApplicationEngine;QQmlComponent component(m_pEngine, QUrl(QStringLiteral(qrc:/main.qml)));QObject *mainObject component.create();if (mainObject nullptr) {qDebug() mainObject fail;return;}m_pRPCServer new RPCServer();RPCClient::get_instance()-tryConnect(); } layer/main.qml import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12Window {visible: truewidth: 640height: 480title: qsTr(Hello layer)Column{anchors.fill: parentspacing: 20Button{width: 140height: 50text: layer }Button{width: 140height: 50text: layer -}} }
相关文章
-
太原网站建设公司哪家好重庆市建设工程施工安全管理网站
太原网站建设公司哪家好重庆市建设工程施工安全管理网站
- 技术栈
- 2026年04月20日
-
太原网站建设地图室内设计应届生简历
太原网站建设地图室内设计应届生简历
- 技术栈
- 2026年04月20日
-
太原网站建设包括什么小学生收集的新闻10条
太原网站建设包括什么小学生收集的新闻10条
- 技术栈
- 2026年04月20日
-
太原网站建设价格套餐首页2免费八度电影院
太原网站建设价格套餐首页2免费八度电影院
- 技术栈
- 2026年04月20日
-
太原网站建设晋icp备企业网站建设 百度文库
太原网站建设晋icp备企业网站建设 百度文库
- 技术栈
- 2026年04月20日
-
太原网站建设世纪优创巴中网站建设
太原网站建设世纪优创巴中网站建设
- 技术栈
- 2026年04月20日
