现在的位置: 首页 > 综合 > 正文

自定义按键响应QComboBox选择选项的方法

2012年06月19日 ⁄ 综合 ⁄ 共 735字 ⁄ 字号 评论关闭

最近做一个Qt项目,界面中有一个QComboBox,这里称为combobox。要求不用鼠标操作,用按键,在combobox未弹出菜单的情况,按上下左右键是选择另外widget,在弹出菜单的情况下,是选择选项。

因为要求界面中的各个widget必须要能够按照自己定义的顺序被选取(按上下左右键),所以只能自己重写按键响应,于是我给combobox安装了过滤器,自己对combobox进行按键响应。

有两个难点:

1.如果判断combobox是弹出了菜单还是未弹出菜单的状态

2.如果在弹出菜单的情况下,如何在对上下移动做按键响应(也就是高亮指定的项)


1.在多次试验的情况我发现combobox->view()->isVisable()可以用来判断是否是弹出了菜单。


2.试了很多种办法都没法解决。

  最后在查阅了源代码的情况下,发现弹出的菜单是由combobox中的view来管理的。而view有一个selectionModel是用来管理选项的高亮的。终于找到了正确的使用方法。

combobox->view()->selectionModel()->setCurrentIndex(combobox->model()->index(index,combobox->modelColumn(),combobox->rootModelIndex()),QItemSelectionModel::ClearAndSelect);

 

也许还有更好的办法,或者是我走入了死胡同,暂时先这么着吧。


补充说明,查看源代码之后,comboBox自己默认的按键响应里会响应QEvent::ShortCutOverride这个事件,当按下ENTER,RETURN键时会响应此事件执行hidePopup()

 

抱歉!评论已关闭.