我想扩展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重新编辑 ]