PDA

View Full Version : Virtual Keyboard to website



Afandi
19th December 2012, 06:21
How can I program virtual keyboard so that when we type lower case letter 'a', it will display lower case 'a' on the textbox of the website?

But the problem with the keyboard that I'm handling now, when I type lower case 'a',it will display upper case 'A' on the textbox of the website.

This is the image of the keyboard and also the example website
8512

There is also another problems which led to functionality of the keyboard.
The symbol and number is not working.
When I click number it does not, show any number but when I clicked symbol, some different things came out.
8513

Here is keyboard.cpp file




#include "keyboard.h"
#include <QEvent>
#include <QKeyEvent>
#include <QApplication>

Keyboard::Keyboard(QObject *parent) : QObject(parent)
{
theWidget = NULL;
}

void Keyboard::setWidget(QWidget* theWidget)
{
this->theWidget = theWidget;
}

void Keyboard::simulateKey(QString keyName)
{
Qt::Key keycode = getKeyCodeFromName(keyName);
if (keycode == Qt::Key_unknown || this->theWidget == NULL)
return;

//A-Z
if (keyName.length() == 1 && keyName[0].unicode() >= 'A' && keyName[0].unicode() <= 'Z')
{
QKeyEvent keyPressEvent(QEvent::KeyPress, keycode, Qt::ShiftModifier);
QApplication::sendEvent(this->theWidget, &keyPressEvent);

QKeyEvent keyReleaseEvent(QEvent::KeyRelease, keycode, Qt::ShiftModifier);
QApplication::sendEvent(this->theWidget, &keyReleaseEvent);
}
else
{
QKeyEvent keyPressEvent(QEvent::KeyPress, keycode, Qt::NoModifier);
QApplication::sendEvent(this->theWidget, &keyPressEvent);

QKeyEvent keyReleaseEvent(QEvent::KeyRelease, keycode, Qt::NoModifier);
QApplication::sendEvent(this->theWidget, &keyReleaseEvent);
}

qDebug("Simulating key: %s", qPrintable(keyName));
}

Qt::Key Keyboard::getKeyCodeFromName(QString keyname)
{
keyname = keyname.toLower();
if (keyname.length() < 1)
return Qt::Key_unknown;

if (keyname == "left") return Qt::Key_Left;
else if (keyname == "right") return Qt::Key_Right;
else if (keyname == "up") return Qt::Key_Up;
else if (keyname == "down") return Qt::Key_Down;
else if (keyname == "center") return Qt::Key_Enter;
else if (keyname == "enter") return Qt::Key_Enter;
else if (keyname == "tab") return Qt::Key_Tab;
else if (keyname == "\n") return Qt::Key_Enter;
else if (keyname == "cpanel") return Qt::Key_PageUp;
else if (keyname == "widget") return Qt::Key_PageDown;
else if (keyname == "pgup") return Qt::Key_PageUp;
else if (keyname == "pgdown") return Qt::Key_PageDown;
else if (keyname == "pageup") return Qt::Key_PageUp;
else if (keyname == "pagedown") return Qt::Key_PageDown;

else if (keyname == "esc") return Qt::Key_Escape;
else if (keyname == "del") return Qt::Key_Delete;
else if (keyname == "delete") return Qt::Key_Delete;
else if (keyname == "backspace") return Qt::Key_Backspace;
else if (keyname == "space") return Qt::Key_Space;
else if (keyname == " ") return Qt::Key_Space;
else if (keyname == "+") return Qt::Key_Plus;
else if (keyname == "-") return Qt::Key_Minus;
else if (keyname == "*") return Qt::Key_Asterisk;
else if (keyname == "/") return Qt::Key_Slash;
else if (keyname == "\\") return Qt::Key_Backslash;
else if (keyname == ".") return Qt::Key_Period;
else if (keyname == ",") return Qt::Key_Comma;
else if (keyname == "?") return Qt::Key_Question;
else if (keyname == "<") return Qt::Key_Less;
else if (keyname == ">") return Qt::Key_Greater;
else if (keyname == "=") return Qt::Key_Equal;
else if (keyname == "@") return Qt::Key_At;
else if (keyname == "!") return Qt::Key_Exclam;
else if (keyname == "%") return Qt::Key_Percent;
else if (keyname == "$") return Qt::Key_Dollar;
else if (keyname == ":") return Qt::Key_Colon;
else if (keyname == ";") return Qt::Key_Semicolon;
else if (keyname == "(") return Qt::Key_BracketLeft;
else if (keyname == ")") return Qt::Key_BracketRight;
else if (keyname == "{") return Qt::Key_BraceLeft;
else if (keyname == "}") return Qt::Key_BraceRight;
else if (keyname == "\"") return Qt::Key_QuoteDbl;
else if (keyname == "volup") return Qt::Key_VolumeUp;
else if (keyname == "voldown") return Qt::Key_VolumeDown;
else if (keyname == "mute") return Qt::Key_VolumeMute;
else if (keyname == "search") return Qt::Key_Search;
else if (keyname == "menu") return Qt::Key_Menu;

else if (keyname.length() >= 2)
{
if (keyname.startsWith('f'))
{
bool convertOK = false;
keyname = keyname.right(keyname.length()-1);
int findex = keyname.toInt(&convertOK);
if (convertOK)
return (Qt::Key)(Qt::Key_F1 + (findex-1));
}
}
else
{
//a-z
if (keyname[0].unicode() >= 'a' && keyname[0].unicode() <= 'z')
return (Qt::Key)(Qt::Key_A + keyname[0].unicode() - 'a');

//A-Z
if (keyname[0].unicode() >= 'A' && keyname[0].unicode() <= 'Z')
return (Qt::Key)(Qt::Key_A + keyname[0].unicode() - 'A');

if (keyname[0].unicode() >= '0' && keyname[0].unicode() <= '9')
return (Qt::Key)(Qt::Key_0 + keyname[0].unicode() - 'a');
}

return Qt::Key_unknown;
}






Here is the keyboard.h file




#ifndef KEYBOARD_H
#define KEYBOARD_H

#include <QObject>
#include <QWidget>

class Keyboard : public QObject
{
Q_OBJECT

public:

Keyboard(QObject *parent = NULL);

void setWidget(QWidget*);

Q_INVOKABLE void simulateKey(QString keyName);

private:

QWidget* theWidget;

Qt::Key getKeyCodeFromName(QString keyname);

};

#endif // KEYBOARD_H




I hope someone can help me to solve this problem.
Thank you

Talei
19th December 2012, 09:29
Your calculations are wrong:


//a-z
if (keyname[0].unicode() >= 'a' && keyname[0].unicode() <= 'z')
return (Qt::Key)(Qt::Key_A + keyname[0].unicode() - 'a');

it equals, for the a, to (dec) 65 + 97 - 65 == 97 == "A"


//A-Z
if (keyname[0].unicode() >= 'A' && keyname[0].unicode() <= 'Z')
return (Qt::Key)(Qt::Key_A + keyname[0].unicode() - 'A');
for the a, it's 65 + 97 - 65 == 97 == "a"

also why don't You use this for the a-Z0-9?

return (Qt::Key)keyname[0].unicode();