Qt自定义小部件与自定义项目 - Qt设计器/ uic

问题描述:

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

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

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

  • C.

当选择 “A” 我想要的纺纱器的最低设置为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的信号]。之后桌面小工具不再需要了!我甚至不想将它展示给用户(这就是为什么一些尺寸属性设置为0;但部分尺寸属性仍然可见)。

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

任何帮助欢迎!

感谢, 马蒂亚斯

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

记住,你是在处理与小部件的属性。 UI文件只不过是小部件,它们的属性以及它们在层次结构中彼此之间的关系的描述。自定义小部件与QPushButton或QComboBox到Designer等类似。重要的是要以UI文件中可理解的方式对自定义小部件的属性进行编码。

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