QtInputContextFactory在嵌入式目标上返回NULL

时间:2012-10-05 20:44:20

标签: qt qt-creator qml embedded-linux qtembedded

在我的嵌入式系统上,我没有X11,Mac,Win,S60等。我一直从QInputContextFactory类的create方法返回一个NULL(0)指针。我确认没有定义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 个答案:

答案 0 :(得分:1)

在Qt中,QInputContextFactory类是加载输入上下文插件的前端。如果输入上下文插件不存在或未正确部署,则无法加载输入上下文插件。输入上下文插件通常存储在$QT_PLUGIN_PATH/inputmethods下。因此,如果该目录中没有插件,create的{​​{1}}方法将返回NULL。

值得注意的是,Qt确实提供了一些自定义插件位置的机制。有关详细信息,请参阅以下内容:

http://qt-project.org/doc/qt-4.8/deployment-plugins.html