2

QMLに基本型を追加するためのリソースが見つからないようです。QObject以上の派生要素を意味するのではなく、基本的な型(bool、int、realなど)を意味します。

ソースでもそれを掘り下げる運はありませんでした...

だからどんな情報でも大歓迎です。

4

3 に答える 3

6

すでに存在しているので、int、bool、realよりも複雑な型を登録したいと思います。

Qt4.xではこれを行うことはできません。Qt 5(QML 2)で可能ですが、パブリックAPIはありません。それでもやりたい場合は、ドキュメントがないため、コードを掘り下げてどのように行われるかを確認する必要があります。

QQmlValueTypeProvider(qqmlglobal_p.h)を実装し、タイプごとにQQmlValueTypeBase <>サブクラス(qqmlvaluetype_p.h)を作成する必要があります。次に、プラグインのregisterTypes()のQQml_addValueTypeProvider()に値型プロバイダーを登録します。

見ることができる1つの例は、QtLocationモジュールのQGeoCoordinate、QGeoRectangleなどです。http://qt.gitorious.org/qt/qtlocation/trees/master/src/imports/location

幸運を。

于 2013-03-20T23:16:14.957 に答える
0

Qt / QMLでカスタムタイプを作成する方法については、この記事この記事をご覧ください。独自のプリミティブ型(int、bool、doubleなど)を作成する限り... Qt言語自体のソースコードを掘り下げなければ、これは可能ではないと思います。それは良い考えではないと思います。 。

独自のプリミティブ型を作成する目的は何ですか?言語自体ですでに定義されているものを使用できないのはなぜですか?

プリミティブ型の名前を変更しようとしている場合は、typedefを実行するオプションが常にあります。「typedefの目的は、既存の型に代替名を割り当てることです。ほとんどの場合、標準宣言が煩雑で、混乱を招く可能性があり、実装ごとに異なる可能性があります。」

于 2013-03-20T23:09:29.060 に答える
0

Qt 5.5以降、 Q_GAGDETを使用して基本タイプを作成できます。たとえば、カスタムMyErrorクラスを作成できます。

class MyError
{
    Q_GADGET
    Q_ENUMS(ErrorType)

    Q_PROPERTY(bool suppressed READ suppressed WRITE setSupressed)
    Q_PROPERTY(QString message READ message WRITE setMessage)
    Q_PROPERTY(ErrorType type READ type WRITE setType)

public:
    enum ErrorType {
        Warning, //Survex should still run
        Fatal, //Survex will not run
        Unknown
    };

    cwSurveyChunkError();
    cwSurveyChunkError(const cwSurveyChunkError &);
    cwSurveyChunkError &operator=(const cwSurveyChunkError &);
    ~cwSurveyChunkError();

    ErrorType type() const;
    void setType(ErrorType type);

    QString message() const;
    void setMessage(QString message);

    bool suppressed() const;
    void setSupressed(bool suppressed);

private:
    QSharedDataPointer<MyErrorData> data;
};

Q_DECLARE_METATYPE(MyError) //Allows you to use this class in QVariant

qmlRegisterUncreatableTypeを使用して、タイプをqmlに登録する必要があります。これにより、QMLでMyError.ErrorType列挙型を使用できるようになります。MyErrorはQ_GADGETであるため、QMLに直接渡し、QObjectであるかのようにMyErrorプロパティを使用できます。Q_GADGETオブジェクトは、QMLで作成できず、シグナルとスロットが機能しないことを除いて、QObjectの軽量バージョンです。

QMLの例:

Item {

   Component.onCompleted: {
        var error = model.errorAt(4); //Returns MyError 
        console.log("Error:" + error.type + " " + error.message + " " + error.suppressed)
   }
}
于 2015-09-30T22:16:39.760 に答える