• 5758阅读
  • 6回复

急问,公司的人都不知道,键盘响应问题。 [复制链接]

上一主题 下一主题
离线hugerat
 
只看楼主 倒序阅读 楼主  发表于: 2008-10-24
— 本帖被 XChinux 执行加亮操作(2008-10-24) —
我需要QT中对键盘的释放事件做作响应,我使用重载keypressevent虚函数的方法,可以在程序中响应键盘操作了,可是只能对键盘的keypress事件作出响应,而无法对keyrelease事件作出响应,请问是怎么回事啊?还有,按下键后,键盘不停重复keypress事件,我知道是因为QT默认打开了键盘的autorepeat,请问如何关闭,问了公司里的达人们都不知道,还望高手们指点。谢谢了。
离线chaoscxm
只看该作者 1楼 发表于: 2008-10-24
不是由keyReleaseEvent()么
帖子签名(将在每个帖子下方显示)
离线rockyluo

只看该作者 2楼 发表于: 2008-10-24
那就用keyReleaseEvent撒。。。。。。
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线hugerat
只看该作者 3楼 发表于: 2008-10-24
呵呵,不能响应键盘释放的问题解决了,原来是要重载keyReleaseevent的虚函数。第二个问题,继续请问中……
离线chaoscxm
只看该作者 4楼 发表于: 2008-10-24
QList<QkeyEvent> keysHeld;

bool myWidget::keyIsDown( QKeyEvent *e )
{
    for ( index = 0; index < keysHeld.count(); index++ ) {
        QKeyEvent *keyEvent = keysHeld.at( index );
        if ( keyEvent->key() == e->key() ) {
            return TRUE;
        }
    }
    return FALSE;
}

void myWidget::keyPressEvent( QKeyEvent *e )
{
    if ( !keyIsDown( e ) ) {
        QKeyEvent *keyEvent = new QKeyEvent( Event_KeyPress, e->key(), e->ascii(),
e->state() );
        keysHeld.append( keyEvent );
        process_the_key( e );
    } else {
        ignore_the_key( e );
    }
}

void myWidget::keyReleaseEvent( QKeyEvent *e )
{
    int index;
    for ( index = 0; index < keysHeld.count(); index++ ) {
        QKeyEvent *keyEvent = keysHeld.at( index );
        if ( keyEvent->key() == e->key() ) {
            keysHeld.remove();
            delete keyEvent;
            break;
        }
    }
    do_some_handle_key_release( e );
}
帖子签名(将在每个帖子下方显示)
离线lazybone
只看该作者 5楼 发表于: 2008-10-24
查查 它的相关用法
isAutoRepeat()
离线ynshisss

只看该作者 6楼 发表于: 2008-10-24
构造函数
QKeyEvent ( Type type, int key, Qt::KeyboardModifiers modifiers, const QString & text = QString(), bool autorep = false, ushort count = 1 )
中不是有设置吗
快速回复
限100 字节
 
上一个 下一个