首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt的inputpanel的退格键有关问题

2013-09-16 
Qt的inputpanel的退格键问题Qt有提供自带的tool,叫inputpanel,我最近一个项目中把它修改成了可以英文+数字

Qt的inputpanel的退格键问题
Qt有提供自带的tool,叫inputpanel,我最近一个项目中把它修改成了可以英文+数字输入的。字符都可以,但是退格键怎么也弄不成功。

代码是这样的:
先设置property:
key_backspace->setProperty("buttonValue", QVariant(QChar(Qt::key_BackSpace)));

再设置mapper:
        signalMapper.setMapping(key_backspace,  key_backspace);
        connect(key_backspace,  SIGNAL(clicked()),  &signalMapper,  SLOT(map()));

再连接信号与槽
    connect(inputPanel, SIGNAL(characterGenerated(QChar)), SLOT(sendCharacter(QChar)));

然后是槽函数,这个就是Qt 的inputpanel源码,路径在example/qt4.7/tools/inputpanel
void MyInputPanelContext::sendCharacter(QChar character)
{
    QPointer<QWidget> w = focusWidget();

    if (!w)
        return;

    QKeyEvent keyPress(QEvent::KeyPress, character.unicode(), Qt::NoModifier, QString(character));
    PRINT2("keypress = %d\n", keyPress.key());
    QApplication::sendEvent(w, &keyPress);

    if (!w)
        return;

    QKeyEvent keyRelease(QEvent::KeyPress, character.unicode(), Qt::NoModifier, QString());
    PRINT2("keyrelease = %d\n", keyRelease.key());
    QApplication::sendEvent(w, &keyRelease);
}

退格键的键码是0x01000003,用QChar来传输好像有点问题,但是不这样,还有其他方法吗?
后来我找到一种比较笨的方法,可以解决这个问题,就是在上面的这个函数中再添加对退格键的特殊处理
    if(character.toAscii() == 3)  // backspace
    {
        QWSServer::sendKeyEvent(0x01000003,Qt::Key_Backspace,Qt::NoModifier,true,false);
    }
这样也解决了,但是这个方法不好,请教高手门,还有没有更好的方法来解决这个问题。

[解决办法]
Key_Backspace 是 0x01000003,需要32bit才能存储,用unsigned int就可以

热点排行