Qt Virtual Keyboard и QInputContextFactory

Я собрал виртуальную экранную клавиатуру Maliit (https://wiki.maliit.org/Main_Page) для своего рабочего стола Ubuntu, и она прекрасно работает с прилагаемыми примерами приложений. Я также смог создать свой собственный простой пример приложения Qt, который бы отображал клавиатуру, когда виджет получил фокус.

Сейчас я пытаюсь развернуть виртуальную клавиатуру во встроенной системе Linux, работающей на моей целевой плате, с сенсорным экраном. На целевой плате не установлен X11, и я запускаю довольно много приложений Qt с QWS (-qws).

Малиитская архитектура ( http://maliit.org/doc/framework/latest/architecture.html ) требует, чтобы экземпляр сервера взаимодействовал с приложением, и приложение устанавливает его входной контекст, используя QApplication :: setInputContext.

На Ubuntu я просто делаю:

export QT_IM_MODULE=Maliit
maliit-server -software &
maliit-exampleapp-plainqt

И клавиатура появляется и все работает (если у меня есть X11)!

На встроенной плате я делаю в одной сессии SSH:

export QT_IM_MODULE=Maliit
dbus-launch --auto-syntax maliit-server -software -qws

А затем еще один сеанс SSH:

export QT_IM_MODULE=Maliit
source /find_dbus_address.sh
echo $DBUS_SESSION_BUS_ADDRESS
maliit-exampleapp-plainqt -qws

Но я всегда получаю ошибку:

QApplication::setInputContext: called with 0 input context

Это означает, что пример приложения терпит неудачу в main в следующей строке:

// Workaround for lighthouse Qt
kit.setInputContext(QInputContextFactory::create("Maliit", &kit));

Вывод команды ‘ps’ на встроенной плате показывает следующее:

  191 user     1692 S    -sh
192 user    39608 S    maliit-server -software -qws
196 user     2092 S    /usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
201 user     1692 R    ps

Таким образом, сервер не работает активно, как в Ubuntu … но находится в состоянии прерывистого сна. Мышь движется в этом состоянии. Я все еще получаю 0 контекста ошибки.

Здесь есть ошибка -> https://bugs.maliit.org/show_bug.cgi?id=185 который утверждает, что QWS с Малиитом работает на него, по крайней мере, он может видеть ввод ..

Существует также режим Maliit, который якобы обходит DBUS (см. Здесь -> http://www.jonnor.com/2012/03/ ) и с этим я все еще получаю ошибки «0 входной контекст»:

Итак, я попытался сделать на моей встроенной плате:

export QT_IM_MODULE=MaliitDirect ; echo $QT_IM_MODULE ; maliit-exampleapp-embedded -qws

И всегда получаю:

QApplication::setInputContext: called with 0 input context
Unable to embedded Maliit input method widget

Я построил Qt 4.8.2 Embedded на Ubuntu 12.04 Desktop и могу запускать maliit-сервер с -qws, а также приложениями-примерами и вижу, что виртуальная клавиатура работает просто отлично, используя QWS. Я использую последний клон для репозитория git для обоих плагинов и maliit-framework.

Моя проблема заключается в запуске того же maliit-сервера и примера приложения, скомпилированного для моей платы ARM на цели. Я постоянно получаю ошибку QApplication :: setInputContext: вызывается с 0 входным контекстом.

Я провел некоторый мониторинг с помощью инструмента DBUS dbus-monitor. Первоначально я открыл 1 сеанс SSH для своей доски и побежал Eval dbus-launch --auto-syntax и скопировал DBUS_SESSION_BUS. Затем я открыл 2 новых сессии SSH.

В первом я сделал:

$ export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-vVNCW9zP7e,guid=75ecd72645dfb9b4358048db506dfec
$ export QT_IM_MODULE=Maliit
$ maliit-server -software -qws

Во втором я сделал:

$ export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-vVNCW9zP7e,guid=75ecd72645dfb9b4358048db506dfecb
$ export QT_IM_MODULE=Maliit
$ maliit-exampleapp-settings -qws

Однако я сразу столкнулся с:

[9;0]QApplication::setInputContext: called with 0 input context
SettingsWidget::connected()
SettingsWidget::pluginSettingsReceived()
Setting layout QVariant(QString, "nemo-keyboard.qml:")

И в оболочке dbus-monitor я вижу:

desktop.DBus; member=NameOwnerChanged
string ":1.6"string ""string ":1.6"method call sender=:1.6 -> dest=org.freedesktop.DBus serial=1 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=Hello
signal sender=org.freedesktop.DBus -> dest=(null destination) serial=8 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
string "org.maliit.server"string ""string ":1.6"method call sender=:1.6 -> dest=org.freedesktop.DBus serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RequestName
string "org.maliit.server"uint32 4
signal sender=org.freedesktop.DBus -> dest=(null destination) serial=9 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
string ":1.7"string ""string ":1.7"method call sender=:1.7 -> dest=org.freedesktop.DBus serial=1 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=Hello
method call sender=:1.7 -> dest=org.maliit.server serial=2 path=/org/maliit/server/address; interface=org.freedesktop.DBus.Properties; member=Get
string "org.maliit.Server.Address"string "address"method return sender=:1.6 -> dest=:1.7 reply_serial=2
variant       string "unix:abstract=/tmp/maliit-server/dbus-CPgFHrxwAi,guid=dfc1dfc367a647e36e6e4c3c506e00db"

Кто-нибудь имеет представление о том, что здесь происходит? Может ли DBUS иметь какое-то отношение к сбою QInputContextFactory? Могу ли я как-то получить больше информации о том, что не работает, и почему я не могу установить свой входной контекст?

Спасибо за помощь —

1

Решение

Невероятно, такое простое исправление. Просто установите QT_PLUGIN_PATH так:

export QT_PLUGIN_PATH=/home/user/plugins
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]