题
我显示一个弹出式菜单来选择在QTableWidget的一些值。最低的项目是“修改列表”项,当我选择一个新的窗口应该自动出现和QComboBox应消失,细胞恢复到一个Qt :: DisplayRole状态。
现在Qt的拥有所有这些漂亮的API的调用像QTableWidget.edit()
和QTableWidget.editItem()
,我真正寻找的是一个QTableWidget.endEditing()
,最好不指定单元格的索引,但我能得到,使用此呼吁:
table.currentIndex()
...但我不知道是否我可以保证,目前的细胞的细胞中被随时进行编辑。
是否有一个API关闭那些种类的编辑?
解决方案
QTableWidget的继承QWidget的19个公共时隙。其中之一是setDisabled(),它应该禁用输入事件对于小窗口和所有子的
我想尝试:
table.setDisabled( true );
table.setDisabled( false );
尽管你说它不为你工作,还存在另一种方法,包括: 如果你不喜欢这样的(表失去焦点,我相信),你可以尝试使用的 EditTriggers 。例如:
table.setEditTriggers( QAbstractItemView::NoEditTriggers );
其他提示
table.setCurrentItem(None)
为我工作。 (不要忘记,如果您使用一些cellChanged / itemChanged槽函数来阻止信号。)
这是与PyQt的。对于C ++我想更换无用NULL。
您可能能够使用QTableWidget.closePersistentEditor()来关闭编辑器。然而,QAbstractItemView.closeEditor()可能会接近你想要的东西,特别是因为你似乎是舒适与基于QModelIndex的API,并且已经使用自定义编辑器部件。
我无法为列表控件说话。但是,我来到这里试图做类似的事情。
我是双击一个小区,并且基于列,带来了一个子形式的列表,然后当其被关闭移动到基于所选择的值的下一个相应的列。
我的问题是,我可以在细胞中获得的价值和“选择”下一个适当的细胞,但原始细胞在编辑模式下选择留了下来!
据终于醒悟过来了,我双击了选择的细胞,即。编辑。
一个单点击选择该小区,但不打开的编辑模式。
边注:绝不能拿该子表格行事真正模式,所以我创建在调用形式的循环:当子表单是可见,唯一的代码是app.processEvents()