Q_PROPERTY不会更新ListView

时间:2016-04-04 21:32:51

标签: android c++ qt listview

我在Android上遇到Qt问题。我的应用程序在MinGW中完美运行,但在Android中它不起作用。我有一个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();
     }
   } 

当在MinGW上更改wolist 时,视图会更新。但是,如果我为Android构建,那么效果不佳。

1 个答案:

答案 0 :(得分:0)

它不应该在任何地方更新。永远不会发出wolistChanged。将对象插入列表不会发出它。它只会在您将实际列表更改为其他列表时才会发出,但在内部更改时不会发出。

您不需要该属性的setter函数,因为它始终是您作为类成员的特定列表。你应该摆脱它。每当在列表中添加或删除对象时发出信号。这将强制视图更新。

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

但是,使用QObject *列表作为模型效率很低。将重新创建整个视图。您应该实现一个自定义QAbstractListModel,它具有有效更新视图所需的额外功能,只更新更改而不是更新所有内容。