【问题标题】:Qt equivalent of .NET data binding?Qt 等效于 .NET 数据绑定?
【发布时间】:2009-11-09 15:22:26
【问题描述】:

Qt 中是否有 .NET 的数据绑定等价物?

我想用引用数据库中特定实体的 QString 填充一些组合框和其他小部件。但是,如果我可以将数据绑定到这些字符串,而不是根据新的组合框选择或其他一些基于构建我自己的将使用 QStrings 搜索的实体索引的方案再次查询数据库,那将会更干净。

我想出的最好的方法是从 QString 派生这些实体并以这种方式将它们推送到小部件中,但我还没有真正尝试过。我不确定它是否会按照我想要的方式工作,而且这似乎是一个令人讨厌的 hack。

如果没有数据绑定,你有什么建议?

谢谢。

【问题讨论】:

  • +1 出于某种原因,将 UI 元素绑定到数据库或内存中的模型应该很简单的想法从未远离 Windows 世界。虽然可以使用 Qt 信号,但它仍然有很多样板代码并且非常乏味:(
  • 这实际上是早于 .Net 的一个非常古老的想法。早在 1997 年,我就在 OOFILE 表单框架中使用它,我看到过由更早年份的 AppMaker 生成的代码,它甚至可以针对纯 C 代码生成绑定。

标签: qt data-binding


【解决方案1】:

作为评论中提到的用户冷漠,您可以使用QDataWidgetMapper 类。 这是将任意小部件绑定到存储在QAbstractItemModel 中的数据的一种非常简单的方法。

链接页面上的示例显示了几行代码,您可以如何将数据模型链接到常用的输入小部件:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();

【讨论】:

    【解决方案2】:

    一种方法是使用 Qt 模型/视图类(以 QAbstractItemModel 为基础),但它们需要您的小部件继承 QAbstractItemView(这是像 QTableView 等小部件)。
    如果您想将 Qt 模型映射到一组小部件,这与 QAbstractItemView 没有什么共同之处,您可以使用 QDataWidgetMapper,它将单独的小部件映射到 Qt 模型/视图索引。但无论如何,正如 Aaron Digulla 所说,你必须编写一些样板代码......

    【讨论】:

      【解决方案3】:

      嗯,具体来说,对于组合框,你可以设置一个模型。对于一般的 QObjects,您可以将通知信号用于连接属性或其他非属性相关信号。我认为还有另一种方法可以做到,但我不记得了。

      【讨论】:

      • 这似乎是要走的路;谢谢。我是 Qt 的新手,您对模型的建议似乎是最简单的方法。我认为这是一种非常丑陋的数据绑定方法,但它似乎产生了我想要的功能。再次感谢。
      • 我强烈建议您查看 QDataWidgetMapper,它适用于不在 MVC 框架下的小部件。
      猜你喜欢
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多