我在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构建,那么效果不佳。
答案 0 :(得分:0)
它不应该在任何地方更新。永远不会发出wolistChanged
。将对象插入列表不会发出它。它只会在您将实际列表更改为其他列表时才会发出,但在内部更改时不会发出。
您不需要该属性的setter函数,因为它始终是您作为类成员的特定列表。你应该摆脱它。每当在列表中添加或删除对象时发出信号。这将强制视图更新。
Q_PROPERTY(QList<QObject*> wolist READ wolist NOTIFY wolistChanged)
但是,使用QObject *
列表作为模型效率很低。将重新创建整个视图。您应该实现一个自定义QAbstractListModel
,它具有有效更新视图所需的额外功能,只更新更改而不是更新所有内容。