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

Posted

技术标签:

【中文标题】如何在另一个小部件更新qt中的相同内容后更新小部件内容【英文标题】:How to update widget content after another widget updates same content in qt 【发布时间】:2012-05-18 15:18:11 【问题描述】:

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

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

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

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

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

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

    从 w1 和 w2 发射信号将有槽来接收信号,然后 w2 将被更新。

这两个问题还有其他解决方案吗?

【问题讨论】:

【参考方案1】:
case:1

connect(w2,SIGNAL(On_Widgetchange),SLOT(this),SignaltoW1anddatabase());

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

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

case:2

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

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

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

【讨论】:

信号发射和连接功能适用于问题 1,第二个问题同样的问题在网络不工作,什么是 netwatcher? 通过 netwatcher 我的意思是一些模块不断探测传入的数据包。

以上是关于如何在另一个小部件更新qt中的相同内容后更新小部件内容的主要内容,如果未能解决你的问题,请参考以下文章

Qt 在另一个小部件中调整小部件的大小

当 Android 中的 Activity 内容更改时,小部件不更新

获取 Qt 小部件以更新使用 Qt Designer 制作的 Qt 表单中的鼠标事件

从另一个线程更新 QT 小部件的不那么冗长的方法?

一些第 3 方小部件在应用程序升级后停止更新

如何创建自己的使用 qss 的 qt 小部件