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);
:ようhandler.cppから行うに言語を追加
#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();
}
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" }
}
をまた、私はすでに述べたように、私は、リストビューでモデルとして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