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