0

私の組み込みシステムでは、X11、Mac、Win、S60 などを使用していません。QInputContextFactory クラスの create メソッドから NULL ( 0 ) ポインターが返されます。QT_NO_LIBRARY が定義されていないことを確認しました。

私のデスクトップ Qt ビルドでは、これは問題なく動作します。

また、カスタム キーと親がメソッドに渡されていることも確認しました。

これが失敗する原因は何ですか? -->

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メソッドはQInputContextFactoryNULL を返します。

注目すべきは、Qt がプラグインの場所をカスタマイズするためのメカニズムをいくつか提供していることです。詳細については、次を参照してください。

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

于 2012-10-08T17:38:57.273 に答える