SectionScroller
& QAbstractListModel
과 함께 ListView
을 사용 중입니다. 정상적으로 스크롤 할 때 (결코 명시 적으로 호출되지 않음) 세그먼트 화 오류가 있음을 알았습니다 (SectionScroller
사용하지 않음)QML 목록보기 및 분할 오류
왜 이런 일이 발생하는지 알고 있습니까?
내가 재현하려고 이제 세그멘테이션 폴트0x402f9c3a는에 ??() /usr/lib/libQtScript.so.4
0x402f9c3a에서 : 더 가치있는 정보가 덤프되지 않습니다하지만
[R3, R7] ldrh의 R1, 디버그 심볼이있다. AFAIK N900의 프로세서이기 때문에 119
그것은 이상한 : 다른 시간 세그먼트 폴트는 /usr/include/QtCore/qatomic_armv6.h에서 (이를 0x0 =) QBasicAtomicInt : 심판의
0x0000cab8했다 armv7/edit : N950에서는 동일한 것을 사용하고 Qt 소스는 ARM
qatomic_arm.h
및qatomic_armv6.h
에만 해당하므로 잘해야합니다.ListView{ id: irrview width: parent.width model: irregulars anchors.top: caption.bottom anchors.bottom: parent.bottom spacing: 5 clip: true section.criteria: ViewSection.FirstCharacter section.property: "form0" delegate: Rectangle{ id: del property int fontSize: 20 height: 60 width: parent.width color: "#E0E1E2" Row{ height: parent.height width: parent.width - 10 anchors.horizontalCenter: parent.horizontalCenter property real columnWidth: (width - 10)/3 property int rad: 10 spacing: 5 Rectangle{ height: parent.height width: parent.columnWidth radius: parent.rad color: "lightsteelblue" Text{ anchors.centerIn: parent text: form0 font.pointSize: del.fontSize } } Rectangle{ height: parent.height width: parent.columnWidth radius: parent.rad color: "lightsteelblue" Text{ anchors.centerIn: parent text: form1 font.pointSize: del.fontSize } } Rectangle{ height: parent.height width: parent.columnWidth radius: parent.rad color: "lightsteelblue" Text{ anchors.centerIn: parent text: form2 font.pointSize: del.fontSize } } } } }
모델이다
#ifndef IRREGULARLISTWRAPPER_H #define IRREGULARLISTWRAPPER_H #include <QObject> #include <QList> #include <QAbstractListModel> #include <QMap> #include "IrregularVerb.h" #include "AbstractIrregularList.h" class IrregularListWrapper : public QAbstractListModel { Q_OBJECT Q_PROPERTY(QString langName READ getLangName NOTIFY langChanged) Q_PROPERTY(int count READ rowCount NOTIFY langChanged) Q_ENUMS(Language) public: Q_INVOKABLE int rowCount(const QModelIndex& = QModelIndex()) const { return db->count(); } Q_INVOKABLE QObject* get(int index) const {return db->at(index);} QVariant data(const QModelIndex &index, int role) const; enum Language { English = 0, German = 1 }; enum IrregularVerbRoles { Form0Role = Qt::UserRole + 1, Form1Role, Form2Role }; IrregularListWrapper(); // ~IrregularListWrapper() { delete db; } // QList<QObject*> getdb() const { return *db; } QString getLangName() const { return langName; } Q_INVOKABLE void changeLang(Language l) { beginResetModel(); db = 0; /*QList<IrregularVerb*>();*/ setLang(l); endResetModel(); } static QMap<Language, QString> plugins; signals: void langChanged(); protected: void setLang(Language); //QList<IrregularVerb*> db; QString langName; AbstractIrregularList * db; }; #endif // IRREGULARLISTWRAPPER_H QMap<IrregularListWrapper::Language, QString> IrregularListWrapper::plugins; IrregularListWrapper::IrregularListWrapper() { QHash<int, QByteArray> roles; roles[Form0Role] = "form0"; roles[Form1Role] = "form1"; roles[Form2Role] = "form2"; const QString pluginPath = "/opt/MeeIrregulars/share/lib%1.so"; plugins[English] = pluginPath.arg("english"); plugins[German] = pluginPath.arg("german"); setRoleNames(roles); setLang(German); } QVariant IrregularListWrapper::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); const IrregularVerb* verb = db->at(index.row()); switch (role) { case Form0Role: return verb->getForm0(); break; case Form1Role: return verb->getForm1(); break; case Form2Role: return verb->getForm2(); break; } return QVariant(); } void IrregularListWrapper::setLang(Language l) { QPluginLoader loader(plugins[l]); db = qobject_cast<AbstractIrregularList*>(loader.instance()); if (db == 0) db = new AbstractIrregularList; switch (l) { case English: langName = "English"; break; case German: langName = "German"; break; } emit langChanged(); } class IrregularVerb : public QObject { Q_OBJECT Q_PROPERTY(QString form0 READ getForm0 NOTIFY formChanged) Q_PROPERTY(QString form1 READ getForm1 NOTIFY formChanged) Q_PROPERTY(QString form2 READ getForm2 NOTIFY formChanged) public: QString forms[3]; QString getForm0() const { return forms[0]; } QString getForm1() const { return forms[1]; } QString getForm2() const { return forms[2]; } IrregularVerb(QString a, QString b, QString c) { forms[0] = a; forms[1] = b; forms[2] = c; } signals: void formChanged(); };
역 추적 :
# 0 QBasicAtomicInt :: REF (이 0x18를 =)
1 QString (이 0xbe88d2a0 다른 =를 =. ..)
# 2 IrregularVerb :: getForm2 (this = 0x9e6de8)
# 3 IrregularVerbWrapper :: data (this = 0x9e31b8, index = ..., role = 35)
// 모델
// libQtDeclarative에 대한 일부 호출감사합니다.
ARM 또는 모든 플랫폼에서만 사용할 수 있습니까? – dtech
x86_64에서도 충돌이 발생합니다. – marmistrz
문제를 해결할 수 있었습니까? –