在窗口小部件和向导页面之间共享数据

时间:2012-06-18 11:39:48

标签: c++ qt

我在QWizard中使用了一组QWizardPage类。与此分开,我有一个登录对话框,从数据库中获取信息和读取。然后将此数据库信息存储在我创建的结构中。

我想避免紧耦合和全局数据(以及相应的Singletons),如果我可以尝试以最佳方式执行事情。

现在我首先在应用程序初始化期间创建向导,并使用信号/槽将结构发送到向导。这当然意味着在创建登录表单时必须存在向导。我想的另一种方法是向向导添加公共函数或更新构造函数。但那意味着我需要在创建数据时将数据传递到向导页面。有没有更好的方法来做到这一点,可能与这个问题的相关部分有关:

另一件事是我在向导的某些阶段从数据库中读取信息。如果你使用registerField()这似乎是一个很好的方法,但我从数据库中读取的信息没有存储在一个小部件中,所以我看不到如何从其他页面访问这些数据。有没有办法做到这一点?

非常感谢

2 个答案:

答案 0 :(得分:1)

将GUI与应用程序的业务逻辑分开是个好主意。 您可以添加一个控制器类,它将处理对数据库的请求,然后更新GUI。

答案 1 :(得分:1)

可能有更好的方法可以做到这一点,但我知道的是我可以在我的代码中创建属性,然后使用registerField来对付这些属性。这里的例子非常简单,但通过这样做,我可以注册我需要的任何东西。我想如果你开始有更复杂的属性而不是“正常”类型,那么它可能会变得更复杂。

Q_PROPERTY(int settingID READ getSettingID)

public:
    int getSettingID() const;

然后在代码中:

registerField("test_setting", this, "settingID");

int TestSettingsWizardPage::getSettingID() const
{ 
    // Return the value here
}