我的硬件上不支持鼠标和触摸屏,因此用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重新编辑 ]