Hi,

I use QAbstractListModel with a SectionScroller and ListView. My QAbstractListModel functions look like this (I post the item class too)

Qt Code:
  1. class IrregularListWrapper : public QAbstractListModel
  2. {
  3. Q_OBJECT
  4. Q_PROPERTY(QString langName READ getLangName NOTIFY langChanged)
  5. Q_PROPERTY(int count READ rowCount NOTIFY langChanged)
  6. Q_ENUMS(Language)
  7. public:
  8.  
  9. Q_INVOKABLE int rowCount(const QModelIndex& = QModelIndex()) const { return db->count(); }
  10. Q_INVOKABLE QObject* get(int index) const {return db->at(index);}
  11. QVariant data(const QModelIndex &index, int role) const;
  12.  
  13. enum Language
  14. {
  15. English = 0,
  16. German = 1
  17. };
  18.  
  19. enum IrregularVerbRoles
  20. {
  21. Form0Role = Qt::UserRole + 1,
  22. Form1Role,
  23. Form2Role
  24. };
  25.  
  26. IrregularListWrapper();
  27.  
  28. QString getLangName() const { return langName; }
  29. Q_INVOKABLE void changeLang(Language l) { beginResetModel(); db = 0; setLang(l); endResetModel(); }
  30.  
  31. static QMap<Language, QString> plugins;
  32.  
  33. signals:
  34. void langChanged();
  35. protected:
  36. void setLang(Language);
  37. QString langName;
  38. AbstractIrregularList * db;
  39.  
  40. };
  41.  
  42. QMap<IrregularListWrapper::Language, QString> IrregularListWrapper::plugins;
  43.  
  44. IrregularListWrapper::IrregularListWrapper()
  45. {
  46. QHash<int, QByteArray> roles;
  47. roles[Form0Role] = "form0";
  48. roles[Form1Role] = "form1";
  49. roles[Form2Role] = "form2";
  50.  
  51. // populating plugins with plugin locations
  52.  
  53. setRoleNames(roles);
  54. setLang(German);
  55. }
  56.  
  57. QVariant IrregularListWrapper::data(const QModelIndex &index, int role) const
  58. {
  59. if (!index.isValid()) return QVariant();
  60. const IrregularVerb* verb = db->at(index.row());
  61.  
  62. switch (role)
  63. {
  64. case Form0Role:
  65. return verb->getForm0();
  66. break;
  67. case Form1Role:
  68. return verb->getForm1();
  69. break;
  70. case Form2Role:
  71. return verb->getForm2();
  72. break;
  73. }
  74. return QVariant();
  75. }
  76.  
  77. void IrregularListWrapper::setLang(Language l)
  78. {
  79. QPluginLoader loader(plugins[l]);
  80. db = qobject_cast<AbstractIrregularList*>(loader.instance());
  81.  
  82. if (db == 0) db = new AbstractIrregularList;
  83.  
  84. switch (l)
  85. {
  86. case English:
  87. langName = "English";
  88. break;
  89. case German:
  90. langName = "German";
  91. break;
  92. }
  93. emit langChanged();
  94.  
  95. }
To copy to clipboard, switch view to plain text mode 

IrregularVerb.h:

Qt Code:
  1. class IrregularVerb : public QObject
  2. {
  3. Q_OBJECT
  4. Q_PROPERTY(QString form0 READ getForm0 NOTIFY formChanged)
  5. Q_PROPERTY(QString form1 READ getForm1 NOTIFY formChanged)
  6. Q_PROPERTY(QString form2 READ getForm2 NOTIFY formChanged)
  7. public:
  8. QString forms[3];
  9. QString getForm0() const { return forms[0]; }
  10. QString getForm1() const { return forms[1]; }
  11. QString getForm2() const { return forms[2]; }
  12. IrregularVerb(QString a, QString b, QString c) { forms[0] = a; forms[1] = b; forms[2] = c; }
  13. signals:
  14. void formChanged();
  15. };
To copy to clipboard, switch view to plain text mode 

When scrolling (even normally, without SectionScroller/FastScroll), I'm getting a Segmentation fault. The backtrace is (omitted some addresses)

Qt Code:
  1. #0 QBasicAtomicInt::ref (this=0x18)
  2. #1 QString (this=0xbe88d2a0, other=...)
  3. #2 IrregularVerb::getForm2 (this=0x9e6de8)
  4. #3 IrregularVerbWrapper::data(this=0x9e31b8, index=..., role=35) // the model
  5. // some calls to libQtDeclarative
To copy to clipboard, switch view to plain text mode 

Do you have an idea why it's happening? Thanks!