我必须创建一个表单,其中将从数据库中获取一些问题。每个问题将有两个单选按钮(是/否),一个标签"解释..."和文本编辑。首先,我在QScrollArea中创建了它,对于数据库中的每个问题(使用QSqlTableModel),所有必要的小部件都被创建并放入布局中。
现在我想我最好在 QListView 中执行此操作,其中项目将是所有问题 = 它的信息(问题 + 2 个单选按钮 + 标签 + 文本编辑 + 它的布局)。我认为我可以很容易地用QAbstractItemDelegate做到这一点,所以我为它创建了一个子类,但我遇到了一些问题。这个问题根本没有显示,甚至没有显示它的信息。我应该改用 ProxyModel 的子类吗?我找到了一个非常有用的可检查代理模型! 子类为模型中的每个项目添加一个复选框,我想如果可以添加一个复选框,也许可以添加所有这些信息?
知道吗?
如果需要任何代码,请注释。
Qt Model & View 类仅提供具有附加复选框的功能,方法是在 QAbstractItemModel::flags() 的标志返回值中包含 Qt::ItemIsUserCheckable。但是,Qt MV类不允许将任何自定义小部件(如单选按钮)用作委托。
渲染小部件的一种方法是在QAbstractItemModel::p aint()重新实现中使用QStyle::d rawComplexControl(),但是当你有多个小部件时,这变得很困难,就像你的情况一样,它不处理交互。
更好的方法是使用 QAbstractItemView::setIndexWidget(),但请参阅此错误报告,了解 Qt 开发人员讨论性能影响。