如何在Qt中的两个独立应用程序之间共享静态常量全局字符串?

时间:2013-05-13 16:45:45

标签: qt global-variables header-files

我正在将客户端和服务器编写为单独的应用程序。有一些全局字符串都应该有权访问,以确保两者之间的正确通信。为这两个应用程序提供此类字符串的典型方法是什么?

我想一种可能的方法是将字符串放在头文件中,并用两个应用程序分发该文件。 Qt中有什么东西可用于获取与操作系统无关的位置来放置此头文件,以便两个应用程序都知道在哪里查找它吗?

我正在寻找一种受益于现有Qt库的解决方案,但任何通用方法都可以。我甚至不确定“库”是否必要,但到目前为止,Qt帮助我的应用程序与操作系统无关,我不想打破这种范式。

更新以增加清晰度:这些全局字符串将是静态和常量 - 这意味着它们在运行时不会更改,因此不需要共享内存。我只是不想在客户端有一个头文件和服务器中的头文件,然后必须始终确保它们的内容完全相同。

2 个答案:

答案 0 :(得分:1)

编辑:QSettings也应该这样做,就像@Amartel建议的那样。

持久且易于访问。如果您想要动态更新设置,请确保您的计划在必要时执行readSettingswriteSettings。我喜欢它的INI格式。

http://qt-project.org/doc/qt-4.8/mainwindows-application.html

http://qt-project.org/doc/qt-4.8/qsettings.html#details

http://qt-project.org/doc/qt-4.8/tools-settingseditor.html

QSharedMemory也可以。

http://qt-project.org/doc/qt-4.8/qsharedmemory.html

示例:

http://qt-project.org/doc/qt-4.8/ipc-sharedmemory.html

您也可以使用QLocalServer

来实现此目的

http://qt-project.org/doc/qt-4.8/qlocalserver.html

http://qt-project.org/doc/qt-4.8/qlocalsocket.html

示例:

http://qt-project.org/doc/qt-4.8/ipc-localfortuneclient.html

http://qt-project.org/doc/qt-4.8/ipc-localfortuneserver.html

希望有所帮助。

答案 1 :(得分:0)

Qt提供了许多在进程之间共享数据的方法,但是大多数方法都需要这些进程来共享一台机器。由于您正在实现客户端 - 服务器范例,我假设您的应用程序将相互交互,并且可能位于不同的计算机上。在这种情况下,最常见的方法是建立TCP连接并通过TCP套接字传输数据。连接设置可以放在配置文件中(例如QSettings参数QSettings::IniFormat)。