2016-04-04 9 views
-1

によって更新されません。私のアプリはMinGWで完全に動作しますが、Androidでは動作しません。 wolistはMinGWのにを変更されたときにビューが更新されListViewのは、私はAndroid上のQtとの問題を抱えていQ_PROPERTY

#include <QObject> 

    class wolistupdate : public QObject 
    { 
    Q_OBJECT 
    Q_PROPERTY(QList<QObject*> wolist READ wolist WRITE setWolist NOTIFY wolistChanged) 
    public: 
    explicit wolistupdate(QObject *parent = 0); 
    QList<QObject*> wolist() const; 
    void setWolist(const QList<QObject*> &wolist); 
signals: 
    void wolistChanged(); 
private: 
    QList<QObject*> m_wolist; 
    }; 




#include "wolistupdate.h" 

    wolistupdate::wolistupdate(QObject *parent) : QObject(parent) 
    { 

    } 

    QList<QObject*> wolistupdate::wolist() const 
    { 
    return m_wolist; 
    } 

    void wolistupdate::setWolist(const QList<QObject *> &wolist) 
    { 
    if(wolist!=m_wolist) 
    { 
     m_wolist=wolist; 
     emit wolistChanged(); 
    } 
    } 

:私は次のようにQ_PROPERTYを持っています。しかし、私がAndroid用にビルドした場合、これはうまく動作しません。

答えて

0

それはどこにも更新されてはなりません。 wolistChangedが放出されることはありません。オブジェクトをリストに挿入しても、オブジェクトはそれを放出しません。実際のリストを別のリストに変更した場合にのみ表示されますが、内部の変更に対しては表示されません。

それは常にあなたがクラスのメンバーとして持っている特定のリストになりますようあなたは、そのプロパティのセッター機能を必要としません。あなたはそれを取り除くべきです。また、オブジェクトがリストに追加されたりリストから削除されたりするたびにシグナルを出します。これにより、ビューが強制的に更新されます。

Q_PROPERTY(QList<QObject*> wolist READ wolist NOTIFY wolistChanged)

しかし、モデルとしてQObject *のリストを使用することは非効率的です。ビュー全体が再作成されます。ビューを効率的に更新するために必要な特別な機能を持つカスタムQAbstractListModelを実装し、すべてではなく変更のみを更新する必要があります。

+0

私のコードは、MinGWの上で動作し、works.But Androdiが発しているのですか? –

+0

再び答えを読んで、あなただけのものを誤って解釈しています。 MinGWビルドはGCC、AndroidビルドはGCC、それは同じコンパイラです。このような不一致が生じる可能性のあるプラットフォームはありません。あなたのコードは、コンパイラに関係なく、単に間違っています。 – dtech

+0

私はあなたの答えに同意します。あなたは正しいです。QAbstractListModelを使用するために私のコードを賛成すれば、それはAndroid上で実行されますか? –

関連する問題