【发布时间】:2010-01-26 19:53:25
【问题描述】:
QT 模型/视图框架存在以下问题。我想在表格视图项中呈现一个小部件。
首先我的想法是使用
void QAbstractItemView::setIndexWidget( const QModelIndex & index, QWidget * widget )
但是这个函数的文档明确指出:
这个函数应该只用于 显示静态内容 与项目对应的可见区域 数据的。如果要显示自定义 动态内容或实现自定义 编辑器小部件,子类 QItemDelegate 而是。
所以他们建议在这里使用代表。嗯,到目前为止一切顺利。我知道委托可以用来创建一个编辑器,它基本上可以是任何 QT 小部件。但问题是——我不希望这个小部件成为编辑器——我想始终使用这个小部件呈现项目。而不仅仅是“渲染”,我需要它具有小部件的确切行为。
现在我要使用的小部件是一个自定义小部件,它是一些其他小部件的容器(几个复选框,几个按钮和一些布局)。
我考虑的解决方案是这样的:
- 将我的自定义小部件的外观添加到像素图。
- 让代理使用此像素图绘制自己。
- 当鼠标悬停在某个项目上时,视图会自动开始编辑(我没有
知道怎么做,但我想这是可能的) - 让代理创建我的小部件作为项目的编辑器。
这个解决方案似乎有效,但对我来说闻起来很糟糕。谁能为这个问题提供更优雅的解决方案?
谢谢。
【问题讨论】:
-
你是什么意思“我需要它来获得小部件的确切行为?
-
我的意思是与用户互动——对用户的行为做出反应
-
你想要什么样的互动?每个细胞就是那样,一个细胞。它不是一个小部件,所以我很难想象你真正想要的交互方式。