【问题标题】:ItemDelegate vs ProxyModel SubclassItemDelegate vs ProxyModel 子类
【发布时间】:2015-01-15 03:04:24
【问题描述】:

我必须创建一个表单,从数据库中获取一些问题。每个问题将有两个单选按钮(是/否)、一个标签“解释...”和一个文本编辑。 首先,我在 QScrollArea 中创建了它,对于 db 中的每个问题(使用 QSqlTableModel 获取),所有必要的小部件都被创建并放入布局中。

现在我认为我最好在 QListView 中执行此操作,其中一个项目将是所有问题 = 它的信息(问题 + 2 个单选按钮 + 标签 + textEdit + 它的布局)。我认为我可以使用 QAbstractItemDelegate 轻松地做到这一点,所以我为它创建了一个子类,但我遇到了一些问题。 根本没有显示问题,甚至没有显示它的信息。我应该改用 ProxyModel 的子类吗?我发现了一个非常有用的checkableProxyModel!子类为模型中的每个项目添加了一个复选框,我想如果可以添加一个复选框,也许可以添加所有这些信息?

有什么想法吗?

如果您需要任何代码,请发表评论。

【问题讨论】:

    标签: qt qabstractitemmodel qitemdelegate qsortfilterproxymodel


    【解决方案1】:

    Qt 模型和视图类仅通过在QAbstractItemModel::flags() 的标志返回值中包含Qt::ItemIsUserCheckable 来提供具有附加复选框的能力。然而,Qt MV 类不允许将任何自定义小部件(如单选按钮)用作委托。

    呈现小部件的一种方法是在您的 QAbstractItemModel::paint() 重新实现中使用 QStyle::drawComplexControl(),但是当您有多个小部件(如您的情况)并且它不处理交互时,这会变得很困难。

    更好的方法是使用QAbstractItemView::setIndexWidget(),但请参阅this bug report,让 Qt 开发人员谈论性能影响。

    【讨论】:

    • 我发现它甚至可以添加一个单选按钮,但无论如何它要复杂得多,而不是让它更加动态,我将只有一个复杂的代码 :) 所以我猜它没用.我想我可以在 qTreeView 中做到这一点,将问题作为父级,将描述作为问题的子级,以及复选框 Y/N 的第二列。我会看看你推荐的文档。谢谢@tmcguire!
    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多