【问题标题】:What is the best way to implement this using Qt使用 Qt 实现此功能的最佳方法是什么
【发布时间】:2018-02-10 11:33:29
【问题描述】:

我是 Qt 的新手,所以我很高兴能得到一个广泛的答案。

这里我画了一些模型:

我们有一个表,其中包含:

  • 带有旋转框的整数值。
  • 具有三个(未明确)分组的单选按钮的单元格
  • 编辑框
  • 与此特定编辑框交互的按钮。

我们还有 2 个按钮可以在表格中添加和删除项目。

我做了一些谷歌搜索,发现可以通过 QTableView 完成。 有没有办法将如此复杂的结构放入细胞中?必须是继承自 QTableView 的单独类吗?

【问题讨论】:

标签: qt user-interface layout


【解决方案1】:

如果您要在表格中包含多达一百或几百个元素,请使用QTableWidget

如果你的元素太多(大约数千个),那就去 QTableView,学习model-view programming

之所以推荐QTableWidget,是因为你是初学者。您所要做的就是创建一个小部件,然后使用setCellWidget(),您就完成了。

如果您有数千行,那么您将不得不使用QStyledItemDelegate 自己绘制小部件,这将在您的QTableView 中绘制小​​部件。这是一件非常痛苦的事情,但没有办法绕过它。原因你可以找到here

【讨论】:

  • 我认为可能不会超过十个。它适用于单个单元格中的三个单选按钮吗?它是一个自定义小部件。
  • @Alignant 那么肯定是QTableWidget!请记住,数据将在表中以及您要使用的任何位置复制。这比模型视图容易得多(尤其是对于初学者)。是的,您可以创建任何您想要的小部件并将其放在表格中。祝你好运!
【解决方案2】:

我看到至少三个选项可以在 Qt 中实现它:

  • 使用QtableViewQTableWidget 并在其中插入一些自定义控件。查看 cmet 成为您帖子的其他人
  • 使用 QGridLayout 并按行和列填充控件
  • 使用QHBoxLayout 创建自己的QWidget 来存储和管理行元素(旋转框、编辑字段、单选按钮)。您可以在 QtCreator 中设计它,它可以拥有自己的 .ui。这可以使处理每行的每个QWidget 之间的交互变得容易(由您的QWidget 类直接处理)。稍后,您可以在 QVBoxLayout 中为您需要的每一行放置一个实例。

个人而言,我会选择最后一个选项,但如果每行的控件具有不同的内容/大小(请参阅 cmets),它可能无法正常工作,那么应该首选第一个选项。

【讨论】:

  • 在最后一个选项情况下,如何将每行的单元格与其他行的单元格对齐?
  • @olya:这可能是一个问题,但不要考虑 OP 显示的内容。 QSpinBox, QRadioButton QPushButton 每行的大小都应该相同,所以QLineEdit 将扩展以占据所有剩余空间。如果QSpinBoxQRadioButtonQPushButton 每一行的内容都不同,这可能会成为一个问题。然后你需要手动处理尺寸,这可能会很痛苦,我承认。
  • 所以你正在发明 QTableView :)
  • 我会使用最后一个选项。对非 Qlabels 使用 QTableView 是地狱,考虑到 OP 非常新,这是最好的方法。
  • 实现一个暴露典型控件小部件的委托可能是 15 行?
猜你喜欢
  • 2011-09-10
  • 2011-02-13
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多