Qt自定义小部件与自定义项目 - Qt Designer / uic

时间:2012-08-27 12:20:35

标签: qt user-interface model widget designer

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

但是:我们想添加一些自定义小部件。创建自定义小部件也不是那么困难。一些好的网站存在:Creating Custom Widgets for Qt DesignerUsing Custom Widgets with Qt Designer,(更多的超链接被阻止),...

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

  • A
  • 下进行。

当选择“A”时,我希望将spinbox的最小值设置为1,将maxiumum设置为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文件中甚至可能违反整个模型/视图概念?!

欢迎任何帮助!

谢谢, 的Matthias

2 个答案:

答案 0 :(得分:1)

我已经以XML的形式在自定义属性中添加了数据。数据存储小部件中使用的一些编码信息。拥有动态properties

是件好事

答案 1 :(得分:0)

请记住,您正在处理窗口小部件的属性。 UI文件只不过是对小部件,它们的属性以及它们在层次结构中彼此之间的关系的描述。自定义窗口小部件与QPushButton或QComboBox到Designer之类的东西没什么区别。重要的是以UI文件中可理解的方式对自定义窗口小部件的属性进行编码。

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