QT4 Qtableview 禁用行选择
我正在使用 qtableview-s 显示 sqlite 表中的一些数据。我有两个基本相同的表格视图。它们都按行显示公交车站(同一型号)。在第一个表中,我选择出发,我想要实现的是,在第二个表中,所选条目之前的所有条目都变得不可选择,以便用户无法向后移动以选择它们。 我能够使用 setRowHidden(row,true) 隐藏它们,但我仍然希望看到它们,但无法选择它们。
我尝试对行使用标志 Qt::ItemFlags (在自定义模型中使用标志方法),但无论我使用什么,行仍然是可选的。有谁知道如何禁用 QTableView 中的行,以便该行仍然显示但不可选择。
I am using qtableview-s to show some data from sqlite tables. I have 2 tableviews which are essentialy same. They are both showing bus stops (same model) in rows. In first table i am selecting departure and what i would like to achieve is that in second table all entries before the selected one are made non selectable so that user cannot move backward to select them.
I was able to hide them using setRowHidden(row,true) but i would like still to see them but not be able to select them.
I tried using flags Qt::ItemFlags (using flags method in custom model) for the row but no matter what i use the rows are still selectable. Does anyone know how to disable row in QTableView so that is still shown but not selectable.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
感谢您的提示/帮助,但同时我找到了解决方案(以及我的代码中的错误)。这是我的自定义模型中的错误。我为项目返回了错误的标志。
对于其他可能尝试做类似事情的人。您必须在自定义模型(QSQLQueryModel 派生)中实现 flags 方法,并为您不想选择的项目返回标志 Qt::NoItemFlags 。我正在返回 QAbstractItemModel::flags(index) 但已经设置了一些默认标志。
Thanks for the tips/help but in the mean time i found solution (well bug in my code). It was bug in my custom model. I was returning wrong flags for item.
For others that might try to do something similar. You have to implement flags method in custom model (QSQLQueryModel derived) and return flag Qt::NoItemFlags for items that you dont want selected. I was returning QAbstractItemModel::flags(index) but there are some default flags allready set.
对不起。定制模型中的旗帜也是我唯一的想法。我假设您的原始数据源是 QSQLQueryModel?您是否创建了子类并覆盖,或者创建了 QAbstractProxyModel?
Sorry. The flags in custom model was my only idea too. I'm assuming your original data-source is QSQLQueryModel? Did you create a subclass and override, or did you create a QAbstractProxyModel?
您可以在 QTableView 上安装事件过滤器并覆盖鼠标按下/鼠标移动事件(或创建一个继承 QTableView 的类来执行相同的操作)。
事件过滤器代码如下所示:
从类实例化 &使用 QTableView:
为同一个类创建
eventFilter
方法:You could install an event filter on the QTableView and override mouse press / mouse move events (or create a class inheriting QTableView to do the same thing).
Event filter code would look like:
From the class instantiating & using the QTableView:
Create the
eventFilter
method for this same class: