Klawiatura ekranowa w Qt4.8, jak się za to zabrać.

0

Piszę aplikację na dotykowy ekran, aplikacja jest pisana przy pomocy biblioteki Qt4.8, potrzebuje zaprogramować klawiaturę ekranową dla mojego programu, lecz nie mam na to pomysłu. Macie jakieś pomysły jak się za to zabrać, a może Qt udostępnia jakiś mechanizm w tym celu?

0

Ekran dotykowy to jedynie dodatkowa myszka.

0

No dobrze, ale co to ma związanego z tematem? Program będzie działał jako program sterujący innymi modułami oraz będzie uruchamiany na Raspberry Pi. Nie będę podpinał do niej żadnej klawiatury zewnętrznej, a program będzie startował wraz z system i nie ma możliwości go zamknięcia. Co do klawiatury chciałem stworzyć ją za pomocą pushButtonów/toolButtonów, tylko nie wiem jak wysłać dany klawisz do obecnego pola wejścia (np textEdit)

0

Polacz zdarzenie Press/Click/Whatever z funkcja, ktory doda odpowiedni tekst do textboxa.

0

No dobrze, ale co to ma związanego z tematem?
Ma związane z tematem to, że nie licząc multitacza i zaawansowanych gestów, zwykłe dotknięcia to jak kliknięcia myszą i nie trzeba do tego żadnych specjalnych mechanizmów.

0

Ok, klawiaturę oparłem na QToolButton'ach, do każdego klawisza podpiąłem mój slot odpowiedzialny za wysłanie zdarzenia QKeyPress, oto kod:

void OnscreenKeyboard::pressKey()
{
    QToolButton *key = dynamic_cast<QToolButton*>(sender());
    if(key != 0)
    {
        QWidget *currentWidget = QApplication::focusWidget();
        if(currentWidget != 0)
        {
            if(letterKeys.contains(key))
            {
                QKeyEvent *event = new QKeyEvent(QEvent::KeyPress, letterKeys.value(key), (keyboardMode == Lowercase) ? Qt::NoModifier : Qt::ShiftModifier);
                QCoreApplication::postEvent(currentWidget, event);
            }
            else if(otherKeys.contains(key))
            {
                QKeyEvent *event = new QKeyEvent(QEvent::KeyPress, otherKeys.value(key), Qt::NoModifier);
                QCoreApplication::postEvent(currentWidget, event);
            }
        }
    }
}

Lecz za każdym razem QApplication::focusWidget() zwraca 0, obojętnie czy kursor znajduje się w jakiś polu tekstowym czy nie, czym to może być spowodowane?

EDIT: Problem rozwiązany, QApplication::focusWidget() zawsze zwraca 0, aby otrzymać wskaźnik obecnego widgetu musiałem się do niego odwołać po przez wskaźnik do okna głównego: mainWindow->focusWidget(), nie wiem czym to jest spowodowane (być może wynika to z wersji Qt for embedded linux)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0