• 7945阅读
  • 1回复

为什么重载QMessageBox的keyPressEvent()函数无效 [复制链接]

上一主题 下一主题
离线uniquezhu
 
只看楼主 倒序阅读 楼主  发表于: 2006-10-19
我想扩展QMessageBox的keyPressEvent()函数,具体实现如下:

代码:
class MyQMessageBox;

class IconKeyboard : public QIconView
{
public:
  IconKeyboard(QWidget *parent=0)
    :QIconView(parent){}
  void keyPressEvent(QKeyEvent * e);
  void keyPressExtension(QKeyEvent *e);
private:
  QIconViewItem *item;
  MyQMessageBox *about;
  int itemIndex;
  int pid;
};

class MyQMessageBox : public QMessageBox
{
public:
  MyQMessageBox ( QWidget * parent=0, const char * name=0 )
    :QMessageBox( parent, name ){}

  void keyPressEvent(QKeyEvent * e);
};

void IconKeyboard::keyPressEvent(QKeyEvent * e)
{
switch(e->key()){
  case Key_F3 :
    qApp->quit();
    break;
  case Key_F1:
    item= currentItem();
    itemIndex= index(item);
    switch(itemIndex){
    case 0:
      pid=fork();
      if (pid==0){
        ::execl("/home/qt-embedded/tetrix", "./tetrix", (char *)0);
        ::exit(-1);
      }
      break;
    case 1:
      pid=fork();
      if (pid==0){
        ::execl("/home/qt-embedded/aclock", "./aclock", (char *)0);
        ::exit(-1);
      }
      break;
    case 2:
      pid=fork();
      if (pid==0){
        ::execl("/home/qt-embedded/rm2yuv", "./rm2yuv", "halowars.rm", (char *)0);
        ::exit(-1);
       
      }
      break;
    }
    break;
  case Key_F4:
    about=new MyQMessageBox;
    about->information(this, "about", "this is about");
    //about->setfocus();
    break;
  default : break;
  }
  QIconView::keyPressEvent( e);
}


void MyQMessageBox::keyPressEvent(QKeyEvent * e)
{
 
  qDebug("MyQMessageBox::keyPressEventt");
  QMessageBox::keyPressEvent(e);
}


其中扩展QMessageBox和QIconView的键盘处理函数采用同样的方法,但是按下按键时IconKeyboard::keyPressEvent(QKeyEvent * e)函数能够被调用,但是MyQMessageBox::keyPressEvent(QKeyEvent * e)却没有调用,而是直接调用了QMessageBox的keyPressEvent(QKeyEvent * e)函数。本来about显示出来后获得了焦点,应该是先执行MyQMessageBox::keyPressEvent(QKeyEvent * e),但是程序好像是认为keyPressEvent(QKeyEvent * e)没有在子类中被重载,而是直接调用了基类的keyPressEvent(QKeyEvent * e),请问有谁知道,帮帮忙啊!
[ 此贴被XChinux在2006-10-21 09:39重新编辑 ]
离线shiroki

只看该作者 1楼 发表于: 2006-10-19
我觉得messagebox的键盘事件应该是被box上的button获得了。 所以窗口本身的slot没有被调用到。
--
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
快速回复
限100 字节
 
上一个 下一个