如何在另一个小部件更新qt中的相同内容后更新小部件内容

时间:2012-05-18 15:18:12

标签: qt pyside

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

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

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

  3. 他们是否可以使用某些常用功能来实现此目的?

    我找到了问题1的2个解决方案:

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

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

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

1 个答案:

答案 0 :(得分:0)

case:1

连接(W2,SIGNAL(On_Widgetchange),SLOT(本),SignaltoW1anddatabase());

this是您的父App。 On_Widgetchange()我指的是小部件W2在更新它时发出的信号。 将SignaltoW1anddatabase()声明为私人广告位。

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

case:2

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

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

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