荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: jjksam (<font color=green><b>Love</b></font>), 信区: Linux
标 题: [转载] QTerm 1.3 Tab问题的修正(转寄)
发信站: 荔园晨风BBS站 (Fri Nov 2 16:45:44 2001), 转信
【 以下文字转载自 jjksam 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: hwang (想想再说), 信区: Linux
标 题: QTerm 1.3 Tab问题的修正
发信站: BBS 水木清华站 (Thu Nov 1 15:28:35 2001)
这个问题的发生是因为QWidget在派送事件时把TAB键作为切换焦点的功能键, 请看
Qt 2.3.0源码/kernel/qwidget.cpp的第3910行:
case QEvent::KeyPress: {
QKeyEvent *k = (QKeyEvent *)e;
bool res = FALSE;
if ( k->key() == Key_Backtab ||
(k->key() == Key_Tab &&
(k->state() & ShiftButton)) ) {
QFocusEvent::setReason( QFocusEvent::Tab );
res = focusNextPrevChild( FALSE );
QFocusEvent::resetReason();
} else if ( k->key() == Key_Tab ) {
QFocusEvent::setReason( QFocusEvent::Tab );
res = focusNextPrevChild( TRUE );
QFocusEvent::resetReason();
}
if ( res )
break;
~~~~~~~~~~~~如果成功, 下面分发事件的代码就不执行了.
QWidget *w = this;
while ( w ) {
w->keyPressEvent( k );
if ( k->isAccepted() || w->isTopLevel() )
break;
w = w->parentWidget();
k->accept();
}
}
break;
最简单的修改方法是重载虚函数focusNextPrevChild(),让它直接返回FALSE. 因此:
在qtermwindow.h中给QTermWindow加一个protected方法:
bool focusNextPrevChild(bool next);
在qtermwindow.cpp的最后加上一段代码:
bool QTermWindow::focusNextPrevChild(bool next)
{
return FALSE;
}
这样编译后就可以了.
另外还有各小错误, QTermWindow::font()中的re = new ...这一句应该移到if{ }
里面来.
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.83.151.219]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店