qml의 SelectionDialog에서 C++에 정의 된 모델의 항목을 표시하는 데 문제가 있습니다. Meego 운영 체제에 대한 응용 프로그램을 만들려고합니다.SelectionDialog 모델을 상속하는 모델로 설정 QAbstractListModel; 표시된 항목이 없습니다
ListView에 항목을 표시하면 모든 항목이 예상대로 작동하고 항목이 표시됩니다. 그러나 SelectionDialog에 표시하려고하면 빈 목록이 표시됩니다. 여기
몇 가지 코드 :languagemodel.h :
#ifndef LANGUAGEMODEL_H
#define LANGUAGEMODEL_H
#include <baza/language.h>
#include <QObject>
#include <QAbstractListModel>
class LanguageModel: public QAbstractListModel
{
Q_OBJECT
public:
enum LanguageRoles {
RoleLanguageName = Qt::DisplayRole,
RoleLanguageCode = Qt::UserRole,
RoleId = Qt::UserRole+1,
RoleChosen = Qt::UserRole+2
};
LanguageModel(QObject *parent = 0);
void addLanguge(const Language &language);
void clear();
int rowCount(const QModelIndex & parent = QModelIndex()) const;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
private:
QList<Language> m_languages;
};
#endif // LANGUAGEMODEL_H
languagemodel.cpp :
//(...)
for(unsigned int i = 0; i < listLanguages.size(); i++)
{
Language language = listLanguages.at(i);
modelLanguages.addLanguge(language);
}
//(...)
ctxt->setContextProperty("modelLanguages", &modelLanguages);
:
#include "languagemodel.h"
#include <QDebug>
LanguageModel::LanguageModel(QObject *parent)
: QAbstractListModel(parent)
{
QHash<int, QByteArray> roles;
roles[RoleLanguageName]="name";
roles[RoleLanguageCode]="code";
roles[RoleId]="id";
roles[RoleChosen]="chosen";
setRoleNames(roles);
}
void LanguageModel::addLanguge(const Language &language){
beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_languages << language;
endInsertRows();
}
int LanguageModel::rowCount(const QModelIndex & parent) const {
return m_languages.count();
}
void LanguageModel::clear(){
for (int i=0; i<m_languages.count(); i++)
{
beginRemoveRows(QModelIndex(), 0, 0);
m_languages.removeAt(0);
endRemoveRows();
}
}
QVariant LanguageModel::data(const QModelIndex & index, int role) const {
if (index.row() < 0 || index.row() > m_languages.count())
return QVariant();
const Language &language = m_languages[index.row()];
if (role == RoleLanguageName)
return language.getName();
else if (role == RoleLanguageCode)
return language.getCode();
else if (role == RoleChosen)
return language.isChosen();
else if (role == RoleId)
return language.getId();
return QVariant();
}
같은 handler.cpp에서 수행에 언어를 추가
whe 다시 modelLanguages는 LanguageModel입니다.
그리고 Settings.qml의 목록을 표시 할 것 :
//(...)
SelectionDialog {
id: dialogLanguages
titleText: qsTr("Select language")
model: modelLanguages
delegate: Text { text: name}
}
나는 dialogLanguages을 열
, 나는 단지 모델로부터 항목 중 하나없이 제목 "언어 선택"을 볼 수 있습니다. 내가 모델로 사용하는 경우, 그것은 잘 작동 :
model: ListModel {
ListElement { name: "ListElement #1" }
ListElement { name: "ListElement #2" }
ListElement { name: "ListElement #3" }
}
을 또한, 이미 언급 한 것처럼, 내가있는 ListView에서 모델로 modelLanguages을 설정하면, 알 항목이 올바르게 표시됩니다.
아무도 도와 줄 수 있고 내가 무엇을 잘못하고 있으며 무엇을 바꾸어야하는지 알 수 있습니다.
도움을 주시면 감사하겠습니다.
감사합니다.
이 기능은 시뮬레이터에서 올바르게 작동합니다. 실제 장치 (Nokia N9)에서 실행하려고하면 빈 목록이 나타납니다. 이는 기기의 SelectionDialog.qml이 여전히 버그가 있기 때문일 수 있습니다. 이 문제를 해결하기 위해 고정 된 SelectionDialog.qml의 내용으로 MySelectionDialog.qml을 만들었습니다. 여기에는 [SelectionDialog.qml] (https://qt.gitorious.org/qt-components/qt-components/blobs)이 있습니다. /87d135fa275415708be9d30f130ba26d9deb49b7/src/meego/SelectionDialog.qml). – ppalasek