0

我在 qt/pyside 中开发桌面应用程序,它在多台计算机上使用,它有一个公共数据库服务器。我有两个问题:

  1. 问题1:当用户有一个打开的小部件让我们说w1(例如小部件显示数据库中的城市列表)。现在假设同一个用户打开新的小部件(w2)(添加/更新城市的小部件),现在如果他/她在数据库中添加新城市,那么如何在 w1 小部件中反映这种变化(即更新 w1 的内容)

  2. 问题 2:场景与问题 1 非常相似,唯一的区别是用户 1 有一个打开的小部件/选项卡 w1 显示城市列表。另一台机器上的用户 2(但数据库相同)添加了新城市,然后如何更新或更改用户 1 的小部件(这里可能用户 1 正在使用 w1 小部件)

他们有什么方法可以使用一些常用功能来做到这一点吗?

我已经为问题 1 找到了 2 个解决方案:

  1. 定期检查数据库更改并更新小部件,但这可能会导致应用程序变慢,因为有多个小部件。

  2. 来自 w1 和 w2 的发射信号将有插槽来接收信号,然后 w2 将被更新。

这两个问题的任何其他解决方案?

4

1 回答 1

0
case:1

连接(w2,SIGNAL(On_Widgetchange),SLOT(this),SignaltoW1anddatabase());

this是您的父应用程序。我的意思是小部件 W2在On_Widgetchange()更新它时发出的信号。将插槽声明SignaltoW1anddatabase()为私有。

在您SignaltoW1anddatabase()编写的代码中,根据 w2 更改更新数据库,并向 w1 添加/删除详细信息并更新 w1。这不会减慢您的应用程序。

case:2

您将需要在更新数据库时广播消息,但无需轮询数据库仍然可行。就像您可以使用相同的信号槽机制在特定 PC 上更新小部件时将包含城市名称的消息广播到网络。

connect(w1,SIGNAL(On_update()),this,SLOT(sendmessage()));

在 sendmessage() 中编写代码以发送添加的详细信息。并让 netwatcher 在另一边运行。

于 2012-05-18T15:28:59.557 回答