• 5851阅读
  • 2回复

关于嵌入式设备上菜单界面的设计问题 [复制链接]

上一主题 下一主题
离线jackyjun
 
只看楼主 倒序阅读 楼主  发表于: 2006-05-16
我的硬件上不支持鼠标和触摸屏,因此用qt设计菜单的时候,只能考虑用按键来实现菜单的操作。可是我发现QMenubar只支持加速键+快捷键才能弹出菜单,所以考虑使用QPushbutton,然后在QPushbutton里加入QPopupMenu,一旦有键按下,就在某个位置把QPopupMenu弹出来。问题是当我按下按键以后,菜单是弹出来了,可是其他的Qpushmenu就不再响应键盘了。而且,弹出来的菜单就放在那里也回不去了。方法很笨,大家见笑了,请问大家,我怎么样才能让按键想鼠标一样自如的控制菜单呢?
请大家指点了,我的代码如下:
MyMainWindow::MyMainWindow()
{
    setGeometry(0,0,320,240);
    filebutton = new QPushButton("File",this);
    filebutton->setGeometry(0,0,50,30);
    file=new QPopupMenu(this);
    file->insertItem("New");
    file->insertItem("Open");
    file->insertSeparator();
    file->insertItem("Save");
    file->insertItem("Save As");
    filebutton->setPopup(file);
    setupbutton = new QPushButton("Setup",this);
    setupbutton->setGeometry(51,0,50,30);
    resultbutton = new QPushButton("Result",this);
    resultbutton->setGeometry(102,0,50,30);
    displaybutton = new QPushButton("Display",this);
    displaybutton->setGeometry(153,0,50,30);


}

void MyMainWindow::keyPressEvent(QKeyEvent*k)
{
    switch(tolower(k->ascii()))
    {
          case 'q':
                QApplication::exit();
                break;
          case 'f':
                setupbutton->setDown(false);
                resultbutton->setDown(false);
                displaybutton->setDown(false);
                filebutton->setDown(true);
                file->popup(QPoint(5,43));
                filebutton->setFocus();
                break;
          case 's':
                filebutton->setDown(false);
                resultbutton->setDown(false);
                displaybutton->setDown(false);
                setupbutton->setDown(true);
                file->clear();
                break;
          case 'r':
                filebutton->setDown(false);
                setupbutton->setDown(false);
                displaybutton->setDown(false);
                resultbutton->setDown(true);
                break;
          case 'd':
                filebutton->setDown(false);
                resultbutton->setDown(false);
                setupbutton->setDown(false);
                displaybutton->setDown(true);
                break;
    }
}
[ 此贴被XChinux在2006-05-16 10:45重新编辑 ]
离线shiroki

只看该作者 1楼 发表于: 2006-05-16
“问题是当我按下按键以后,菜单是弹出来了,可是其他的Qpushmenu就不再响应键盘了。”
你说的这个是正常的现象,因为popupmenu弹出来以后它是focus widget, 所有的键盘事件都会传给它
但是你说的菜单弹出来以后就hide不了, 这应该不会吧,在你选了菜单的某项的时候菜单就会hide了。

另外, 如果要实现点一个硬件的按钮让popupmenu hide, 我觉得应该在popupmenu里响应这个按键值hide自己, 这应该是最简单的实现方式。
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线jackyjun
只看该作者 2楼 发表于: 2006-05-17
谢谢版主,问题已经解决了!在Popupmenu 里响应keyPressEvent就可以了
快速回复
限100 字节
 
上一个 下一个