0

我又开始使用 Qt 了。我们要做的是自动生成图形用户界面。因此,我仔细研究了 .ui 文件格式(这是一种基于 XML 的文件格式)。这些文件由 Qt Designer 生成,但可以由任何其他软件轻松创建。这部分工作到目前为止。

但是:我们想添加一些自定义小部件。创建自定义小部件也不是那么困难。那里有一些不错的网站:为 Qt 设计器创建自定义小部件,使用 Qt 设计器使用自定义小部件,(保留更多超链接),...

我的问题是:如何实现显示自定义项目的自定义小部件。让我们举一个例子。我们有一个 QComboBox 和一个 QSpinBox。组合框包含三个项目

  • 一个
  • C。

选择“A”时,我希望将 spinbox 的最小值设置为 1,最大值设置为 9;选择“B”时,微调框的最小值应设置为 10,最大值为 99;选择“C”应该将 spinbox 的最小值设置为 100,最大值设置为 999。这是如何正确完成的?

目前我将数据设置在 QTableWidget 中,这对我来说是一个帮助类。每行有三列/单元格:

item |  min | max
-----+------+-----
  A  |   0  |   9
  B  |  10  |  99
  C  | 100  | 999

我有我的自定义小部件,其中包含 QComboBox 和 QSpinBox。在运行时,我告诉自定义小部件从 QTableWidget 获取数据/模型并通过名为 setFriendContainer() 的方法复制到自身 [它甚至是一个公共插槽,应该连接到自动发出的来自 tablewidget 的信号]。之后不再需要 tablewidget 了!我什至根本不想向用户展示它(这就是为什么某些尺寸属性设置为 0;但它仍然部分可见)。

我认为这并不是一种真正干净的实现方式。什么会更好/替代?这些项目也会生成并且应该包含在同一个 .ui 文件中。当然可以在运行时从另一个文件加载它,但我认为这不是一个选择。您认为我的解决方法还可以,还是太“丑陋”?在一些示例中,您可以看到如何添加单个自定义属性,但我认为这是不同的 - 如果您想添加整个容器(项目列表或表格等)。但是在 .ui 文件中包含它甚至可能违反整个模型/视图的概念?!

欢迎任何帮助!

谢谢, 马蒂亚斯

4

2 回答 2

1

我已将我们的数据以 XML 的形式添加到自定义属性中。数据存储小部件中使用的一些编码信息。有动态属性很好。

于 2012-08-31T07:12:20.493 回答
0

请记住,您正在处理小部件的属性。UI 文件只不过是对小部件、它们的属性以及它们在层次结构中的相互关系的描述。自定义小部件与设计师的 QPushButton 或 QComboBox 没有什么不同。重要的是以在 UI 文件中可以理解的方式对自定义小部件的属性进行编码。

查看UI 架构并确保可以在有效文件中描述您的小部件,您可能会得到最好的服务。之后只是为了确保您的属性行为正确(即,您可以按任何顺序设置属性并获得相同的结果)。如何实现小部件完全取决于您(制作您自己的数据结构,不要将“不可见”的树小部件拖入其中)。

于 2012-08-27T14:02:11.883 回答