0

在我的嵌入式系统上,我没有 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;
}
4

1 回答 1

1

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

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

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

于 2012-10-08T17:38:57.273 回答