如何使用Qt来实现最佳方法?

5

我完全不了解Qt,所以希望您能给予详细的答复。

这里我画了一些模型:

enter image description here

我们有一种包含以下内容的表格:

  • 一个带有微调框的整数值。
  • 三个(不是特定的)分组单选按钮的单元格
  • 编辑框
  • 与此特定编辑框交互的按钮。

此外,我们还有两个按钮用于向表格中添加和删除项目。

我进行了一些谷歌搜索,并发现可以通过QTableView完成。是否有将这样的复杂结构放入单元格中的方法?必须从QTableView继承一个单独的类吗?


1
你可以创建继承自 'QAbstractItemModel' 和 'QStyledItemDelegate' 的自定义类。例如:http://doc.qt.io/qt-5/qtwidgets-itemviews-spinboxdelegate-example.html - olya
通常,表格不会包含编辑框,而是显示值,当您编辑单元格时,编辑器小部件将覆盖在其上方。 - Kuba hasn't forgotten Monica
2个回答

2
我看到至少有三种方法可以在Qt中实现这个功能:
  • 使用QTableViewQTableWidget并在其中插入一些自定义控件。请参阅其他人对您发布的评论。
  • 使用QGridLayout通过行和列填充控件。
  • 制作自己的QWidget来存储和管理线条元素(旋转框、编辑字段、单选按钮),使用QHBoxLayout。您可以在QtCreator中设计它,它可以拥有自己的.ui文件。这可以使处理每个线条的每个QWidget之间的交互变得容易(直接由您的QWidget类处理)。稍后,您可以将其实例放置在需要的每一行的QVBoxLayout中。
个人而言,我会选择最后一个选项,但如果每行的控件具有不同的内容/大小(请参见评论),则应首选第一个选项。

在最后一种选项情况下,您将如何使每行的单元格与其他行的单元格对齐? - olya
@olya:这可能是个问题,但不考虑 OP 所展示的内容。QSpinBoxQRadioButtonQPushButton 的大小应该在每一行上都相同,这样 QLineEdit 就会扩展以占据所有剩余空间。如果 QSpinBoxQRadioButtonQPushButton 在每一行上的内容不同,则需要手动处理大小,这可能会很麻烦,我承认。 - jpo38
那么你正在发明 QTableView :) - olya
我会选择最后一个选项。对于非QLabel使用QTableView是一种折磨,考虑到OP很新,这是最好的方法。 - Jeroen3
实现一个公开典型控件小部件的委托可能只需要15行代码? - Kuba hasn't forgotten Monica

2
如果您的表格中有100个或者几百个元素,那么请使用QTableWidget
如果您的表格中有太多的元素(大约有数千个),那么请使用QTableView,并学习模型视图编程
我推荐使用QTableWidget的原因是因为您是初学者。您只需要创建一个小部件,然后使用setCellWidget()就可以了。
如果您有成千上万行数据,那么您将不得不使用QStyledItemDelegate自己绘制小部件,这将在您的QTableView内部绘制小部件。这是一件非常痛苦的事情,但是没有其他办法。您可以在这里找到原因here

我认为它可能不会超过十个。它能在单元格中为三个单选按钮工作吗?这是一个自定义小部件。 - Alignant
@Alignant 那肯定是 QTableWidget!只需记住,数据将在表格和您想要使用它的任何地方重复。这比 Model-View(特别是对于初学者)容易得多。是的,您可以创建任何您想要的小部件并将其放入表格中。祝你好运! - The Quantum Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接