- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
好的,所以我设置了一个 QTreeView
和一个从 QAbstractItemModel
子类化的模型。到目前为止一切顺利。
模型的数据每隔固定时间间隔更新一次,例如两秒。为简单起见,假设项目只是短整数,没有层次结构。所有项目都是独一无二的。
t=0:
497
1739
18
125
19
用户选择项目18
:
t=1:
497
1739
[18]
125
19
t=2,元素列表更新变化!
497
18
[1739]
125
例如,1739
和18
现在被调换了,最后的19
消失了。
哎呀! 1739
现在被选中,这似乎是合法的:用户已经选择了第三个项目,即使在更新后它仍然被选中。
我希望问题现在很明显:我需要选择来“跟踪”到底选择了什么项目。使用项目本身的一些内部 ID。因此,如果新列表包含一个与之前选择的项目具有相同 ID 的项目,它将被选中。
我可以在更新时自己更改选择,或者使用 insertRow
和 removeRow
,但我不知 Prop 体是什么(1739
和18
被交换了)在列表中发生了变化,我刚收到一个新的整数列表。
我查看了 QItemSelectionModel
,尽管 Qt 文档说
The QItemSelectionModel class keeps track of a view's selected items.
,它看起来不像我需要的。我认为这是我需要子类化的另一个代理模型,但它不是。
接下来我认为我的模型是编写跟踪选择的代码的正确位置,但我又失败了:模型无法检索 View 的选择模型 (view->selectionModel( )
),因为它无法访问 View 。
我最终可能会在我的模型中编写一些信号和插槽,以便模型外部的代码可以更新选择,加上模型外部连接到 View 的 selectionModel 的插槽更新存储在模型中的当前选定项目的 id等等等等,但是在写这些东西之前我想问问是否已经有一些我不知道的实践。
解释所有这些内容的文档和文章太少了,我自己无法找到上述问题的答案。
谢谢!
最佳答案
最好检测何时从模型中添加/移动/删除项目并发出相应的信号,但这会很复杂,您可能不需要这么复杂的功能。
假设您对单一选择感兴趣,您可以非常简单地做到这一点。当前选择更改时,只需存储所选值。当您收到模型已更改的通知时,只需找到项目的新位置并更新选择即可。
void onCurrentSelectionChange(const QModelIndex & index) { // slot
selectedValue = index->data(); // update field: QVariant selectedValue
}
void onModelReset() { // slot connected to signal where model reports that it was changed
QModelIndex newSelection = yourModel->findIndexOfValue(selectedValue); // you have to provide such method in your moel
emit newSelection(newSelection); // signal connected to setCurrentIndex slot of QTreeView or selection model
}
如果要处理更复杂的选择会比较麻烦。
关于c++ - 在 TreeView 中进行 "tracking"项选择的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24338037/
我正在努力掌握 perl。我正在尝试编写一些脚本作为调度模拟器。 FCFS、SSTF 和 Scan and Look 我有一个包含 block 请求列表的数组,另一个用作缓冲区。首先,我将复制第一个请
假设我正在ng-repeat处理images,它是一个包含src 和 的对象数组>标题属性。 var images = [ {src: 'a.jpg', caption: 'a'}, {src
“git branch --track”和“git checkout -b --track”之间有什么区别,如果有的话? 最佳答案 内部 git-branch 被调用,然后新分支被 check out
我在自定义 Android Switch 小部件的外观时遇到问题。我有自定义的 xml 可绘制对象,我想将其用于拇指(通常显示开或关的小按钮部分)和轨道(拇指滑过的背景)。当我使用 android:t
文档有点太简单了,我无法完全理解 A controller thus effectively has three modes of operation, determined by whether i
已在 Google Analytics(分析)帮助论坛中发布此内容,但无人能提供帮助。希望我在这里有更多的运气......: 我对我的网页使用 Google Anlaytics 异步跟踪。像个魔法一样
我有一个简单的ng-repeat,其中track by表达式不起作用。这是Fiddle . {{n}} 生成的标记“track”是表达式 [[1,2,3,4,5,5,5,5] track
我想使用 Spotify iOS SDK 从选定的播放列表中获取轨道。但它总是不返回我的数组中的任何项目。我正在使用以下代码来获取轨道: [SPTPlaylistSnapshot playlistWi
我正在尝试将一维数组分配给我的默认构造函数,但我不断收到此错误消息。有没有办法为同一个类创建两个默认构造函数,一个不带参数,一个带参数? 标题 #include #include using na
问题中的答案Android play console: internal testing version, close testing ? how does it works?说: End users
也许有人可以告诉我如何在 Switch() 中设置 Track Width、Track StrokeWidth、Thumb Diameter 的大小 Switch(
我有一个适用于 Android 和 iOS 的移动应用,两者都是使用 Xamarin 构建的。 Android - 该应用会上传到 Beta 轨道 上的 Play 商店,测试完成后,就会升级到生产轨道
我在我的 http 请求中发送一个 Json 格式的用户实体,如下所示: POST http://localhost:52054/api/Authentication/DeleteAccessToke
我正在研究 Java 类介绍的最终项目。该项目的一部分涉及从 MusixMatch using their API 获取歌词片段。我可以使用 track.lyrics.get 从 API 获取歌词,但
我将 ASP.NET Core 与 EFCore 2.0.3 和 Automapper 6.2.2 一起使用 这是我的模型: public class StudentClass {
所以我同时使用 react-native-video 和 react-native-track-player,通常两者都工作正常,但是要使用视频播放器的一些额外功能,比如缓冲,我必须使用 Exo pl
有时我听到人们讨论跟踪编程错误的好处,如果不是为了提高对常见错误的认识的话。我已经开始保留我在代码中发现的错误列表,以及可能导致这些错误的原因。我的主要问题是: 我应该保留哪些与我的错误相关的信息 跟
可以对卡尔曼滤波器更新的估计值应用上限和下限约束吗? 我有一种在实际生活中只能有非负值的状态。当我应用卡尔曼滤波器时,此状态会更新为具有负值。如何在卡尔曼滤波器中应用此限制约束? 请回复 谢谢 最佳答
我正在构建一个使用Sendgrid Marketing Email API的应用程序,目的是发送新闻通讯。它具有许多文章链接,还包括横幅广告和其他服务链接。我们显然希望继续跟踪文章链接,但要排除其他链
我所在的团队管理着许多软件项目 - 我们所做的大部分工作都是端到端的,从需求跟踪到项目管理再到采购和设置 - 财务跟踪是我们的一大难题我们的财务有一个完整的过程。目前我们使用电子表格并将所有发票和采购
我是一名优秀的程序员,十分优秀!