編輯:關於android開發
TableViewColumn是TableView的列定義,TableViewColumn通過role屬性定義來向model獲取數據,TableView會通過調用model的roleNames()方法來獲取model可用的role。所以,除了必須要實現的5個虛函數外,還必須重新實現roleNames()來告訴View有哪些role是可用的,roleNames()的原型如下:
- TableView{
- id:tableView1
- anchors.fill: parent
- TableViewColumn{
- width:50
- title:""
- role:"tagging"
- }
- TableViewColumn{
- width:80
- title:"操作"
- role:"name"
- }
- }
- QHash
roleNames() const;
roleNames()的實現相當簡單:
- classSqlMenuEntry:public QAbstractItemModel,public QQmlParserStatus
- {
- Q_OBJECT
- public:
- explicit SqlMenuEntry(QObject *parent=0);
- ~SqlMenuEntry();
- enum MenuEntryRoles{idRole=Qt::UserRole+1,nameRole,defaultEntryRole,customEntryRole,iconRole,iconHoverRole};
- int rowCount(const QModelIndex &parent=QModelIndex()) const;
- int columnCount(const QModelIndex &parent=QModelIndex()) const;
- QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const;
- QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const;
- QModelIndex parent(const QModelIndex &child) const;
- QHash
roleNames() const; - private:
- QHash
mRoleNames; - QList
> mRecords; //真正的數據保存在這裡,QList只能保存二維數據沒辦法保存樹狀節點,這裡僅僅是例子 - };
mRoleNames可以在類構造函數中進行初始化:
- QHash
SqlMenuEntry::roleNames() const
- {
- return mRoleNames;
- }
在QML中就可以通過"name"、"menuid"、"icon"對數據進行訪問:
- SqlMenuEntry::SqlMenuEntry(QObject *parent)
- :QAbstractItemModel(parent)
- {
- mRoleNames[nameRole] = "name";
- mRoleNames[idRole] = "menuid";
- mRoleNames[iconRole] = "icon";
- mRoleNames[defaultEntryRole] = "default";
- mRoleNames[iconHoverRole] = "iconHover";
- }
如果僅為二維表提供數據,那麼根據以上幾個接口函數的名稱就可以簡單的實現數據供給View視圖,其中:
- ListView{
- model:MenuEntryModel{ }
- delegate:Item{
- Column{
- Text{text:name}
- Text{text:icon}
- }
- }
- }
- int SqlMenuEntry::rowCount(const QModelIndex &parent) const
- {
- return mRecords.size();
- }
- int SqlMenuEntry::columnCount(const QModelIndex &parent) const
- {
- return 1; //QML不使用列獲取數據,默認返回一列,不返回1例的話,View控件會認為表是空表,不獲取數據
- }
- QModelIndex SqlMenuEntry::index(int row, int column, const QModelIndex &parent) const
- {
- if((row >= 0)&&(row < mRecords.size()))
- {
- return createIndex(row,column);
- }
- return QModelIndex(); //返回一個無效的空索引
- }
- QModelIndex SqlMenuEntry::parent(const QModelIndex &child) const
- {
- return QModelIndex(); //二維表中的行沒有parent節點
- }
- QVariant SqlMenuEntry::data(const QModelIndex &index, int role) const
- {
- if(index.isValid)
- {
- return mRecords[index.row()][role];
- }
- }
實現後的model類可以通過
- QHash
row;
- row[nameRole] = "name1";
- row[iconRole] = "icon1";
- mRecords.append(row);
進行注冊,注冊後的類可以在QML生成實例:
- qmlRegisterType
("com.limutech.tv",1,0,"MenuEntryModel");
View組件獲取數據的流程大概如下:
- import com.limutech.tv 1.0
- MenuEntryModel{
- id:menuEntryModel
- }
- ListView{
- model:menuEntryModel
- ...
- }
android shareSDK實現第三方分享,androidsharesdk一. http://www.mob.com/ 在mob官網注冊賬號,
Android學習——uses-sdk標簽詳解,androiduses-sdk1 前言 我們都知道,Android的版本在不斷的迭代,並且每個版本都加入了不同的新特性。那
開發新浪微博 首先須要使用官方提供的API接口weibo4android.jar 下載地址:http://download.csdn.net/so
《Android源碼設計模式解析》讀書筆記——Android中你應該知道的設計模式 斷斷續續的,《Android源碼設計模式解析》也看了一遍,書中提到了很多的設計模式,