Qt相当于.NET数据绑定?

San*_*nto 21 data-binding qt

在Qt中是否有相当于.NET的数据绑定?

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

我提出的最好的方法是从QString派生这些实体并以这种方式将它们推入小部件,但我还没有真正尝试过.我不确定它是否会以我想要的方式工作,而且它看起来像是一个讨厌的黑客.

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

谢谢.

cyb*_*vnm 7

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


tom*_*odi 7

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

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

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


che*_*eez 3

嗯,特别是对于组合框,您可以设置一个模型。对于一般的 QObject,您可以使用属性的通知信号来连接或其他非属性相关的信号。我认为还有另一种方法可以做到这一点,但我不记得了。

  • 我强烈建议您查看 QDataWidgetMapper,它适用于不在 MVC 框架下的小部件。 (3认同)