• 7809阅读
  • 1回复

windows制作屏幕键盘 [复制链接]

上一主题 下一主题
离线ucgtflyuv
 
只看楼主 倒序阅读 楼主  发表于: 2010-11-11
— 本帖被 XChinux 执行加亮操作(2010-11-12) —
在论坛上看到了一个X11实例。我想在windows时下制作一个屏幕键盘,对于在windows下该怎么发送消息不是很了解,看了网上的一些段源码,发送消息都是向自己的父窗口发送,要怎样才能将自定义的键盘事件通知给系统呢。
网上摘下的一段代码如下:
void WidgetKeyboard::on_btn_clicked(int btn)
{
    if(! soundFilePath.isEmpty())
        QSound::play(soundFilePath);
    QString strKeyId;
    strKeyId = allButtons.at(btn)->accessibleName();
    bool isOk;
    int keyId = strKeyId.toInt(&isOk, 16);
    if (strKeyId.isEmpty() || !isOk) {
        QMessageBox::information(0,0,"Key Not Found");
        return;
    }
    
    //Keys to be handled separately
    if (keyId==Qt::Key_Shift
        || keyId==Qt::Key_Control
        || keyId==Qt::Key_Alt
        || keyId==Qt::Key_Print
        )
        return;

    int involvedKeys = 1;
    Qt::KeyboardModifiers Modifier = Qt::NoModifier;
    if (isCtrl) {
        Modifier = Modifier | Qt::ControlModifier;
        involvedKeys++;
    }
    if (isShift) {
        Modifier = Modifier | Qt::ShiftModifier;
        involvedKeys++;
    }
    if (isAlt) {
        Modifier = Modifier | Qt::AltModifier;
        involvedKeys++;
    }    
    
    bool isTextKey = false;

    if(keyId==Qt::Key_Insert && !isShift)
        return;
    

    QString ch = allButtons.at(btn)->text().trimmed();
    if (ch=="&&")
        ch="&";
    else if (keyId==Qt::Key_Space)
        ch = " ";
    else if (checkNotTextKey(keyId))
        ch = QString();
    else
        isTextKey = true;
        

    if(isIns && isTextKey) {
        QKeyEvent keyEventIns(QEvent::KeyPress, Qt::Key_Delete, Qt::NoModifier);
        QApplication::sendEvent(m_pParent->focusWidget(), &keyEventIns);
    }

    QKeyEvent keyEvent(QEvent::KeyPress, keyId, Modifier, ch, false, involvedKeys);
    QApplication::sendEvent(QApplication::focusWidget(), &keyEvent);

    
    btnShiftLeft->setChecked(false);
    btnShiftRight->setChecked(false);
    btnCtrlLeft->setChecked(false);
    btnAltLeft->setChecked(false);
}
离线xhy2008ok

只看该作者 1楼 发表于: 2012-10-11
请问这个问题解决没啊,新手求解答
快速回复
限100 字节
 
上一个 下一个