最近做一个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()