0

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

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

任何想法?

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

4

1 回答 1

0

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

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

更好的方法是使用QAbstractItemView::setIndexWidget(),但请参阅此错误报告,供 Qt 开发人员讨论性能影响。

于 2015-01-14T19:04:24.543 回答