我已经开始再次使用Qt了。我们想要做的是自动生成图形用户界面。因此,我仔细研究了.ui文件格式(这是一种基于XML的文件格式)。这些文件由Qt Designer生成,但可以通过任何其他软件轻松创建。到目前为止,这部分工作。
但是:我们想添加一些自定义小部件。创建自定义小部件也不是那么困难。一些好的网站存在:Creating Custom Widgets for Qt Designer,Using Custom Widgets with Qt Designer,(更多的超链接被阻止),...
我的问题是:如何实现显示自定义项目的自定义小部件。我们举一个例子。我们有一个QComboBox和一个QSpinBox。组合框有三个项目
当选择“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
答案 0 :(得分:1)
我已经以XML的形式在自定义属性中添加了数据。数据存储小部件中使用的一些编码信息。拥有动态properties。
是件好事答案 1 :(得分:0)
请记住,您正在处理窗口小部件的属性。 UI文件只不过是对小部件,它们的属性以及它们在层次结构中彼此之间的关系的描述。自定义窗口小部件与QPushButton或QComboBox到Designer之类的东西没什么区别。重要的是以UI文件中可理解的方式对自定义窗口小部件的属性进行编码。
通过查看UI schema并确保您的窗口小部件可以在有效文件中描述,您可能得到最好的服务。之后,只是为了确保您的属性行为正确(即,您可以按任何顺序设置属性并获得相同的结果)。你如何实现小部件取决于你(制作你自己的数据结构,不要拖动“看不见的”树小部件)。