QtInputContextFactory возвращает NULL для встроенной цели
В моей встроенной системе у меня нет X11, Mac, Win, S60 и т. Д. Я продолжаю получать указатель NULL ( 0), возвращаемый методом create класса QInputContextFactory. Я проверил, что QT_NO_LIBRARY не определен.
На моем рабочем столе Qt Build это работает просто отлично.
Я также проверил, что мой пользовательский ключ и родительский элемент передаются методу.
Что может привести к сбою? ->
if (QInputContextFactoryInterface *factory =
qobject_cast<QInputContextFactoryInterface*>(loader()->instance(key))) {
result = factory->create(key);
}
Вот весь метод:
QInputContext *QInputContextFactory::create( const QString& key, QObject *parent )
{
QInputContext *result = 0;
#if defined(Q_WS_X11) && !defined(QT_NO_XIM)
if (key == QLatin1String("xim")) {
result = new QXIMInputContext;
}
#endif
#if defined(Q_WS_WIN)
if (key == QLatin1String("win")) {
result = new QWinInputContext;
}
#endif
#if defined(Q_WS_MAC)
if (key == QLatin1String("mac")) {
result = new QMacInputContext;
}
#endif
#if defined(Q_WS_S60)
if (key == QLatin1String("coefep")) {
result = new QCoeFepInputContext;
}
#endif
#ifdef QT_NO_LIBRARY
Q_UNUSED(key);
#else
qDebug() << "Here we are";
if (QInputContextFactoryInterface *factory =
qobject_cast<QInputContextFactoryInterface*>(loader()->instance(key))) {
result = factory->create(key);
}
#endif
if (result)
result->setParent(parent);
return result;
}
1 ответ
В Qt QInputContextFactory
класс является внешним интерфейсом при загрузке плагинов входного контекста. Он не сможет загрузить плагин входного контекста, если он не существует или не был правильно развернут. Плагины входного контекста обычно хранятся в $QT_PLUGIN_PATH/inputmethods
, Таким образом, если в этом каталоге нет подключаемого модуля, create
метод QInputContextFactory
вернет NULL.
Следует отметить, что Qt предоставляет несколько механизмов для настройки расположения плагинов. Обратитесь к следующему для более подробной информации об этом: