青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::

共有 main.cpp, Widget.h, Widget.cpp, Widget.ui, MyModel.h, MyModel.cpp 六個文件。

可從此下載整個工程文件: /Files/biao/ModelDemo.zip

關鍵在于Model中的數(shù)據(jù)是動態(tài)加載的,而不是一次性全加載到Model中。


/***************************************************

 *              main.cpp

 ***************************************************/

#include <QtGui/QApplication>

#include "Widget.h"


int main(int argc, char *argv[]) {

    QApplication a(argc, argv);

    Widget w;

    w.show();


    return a.exec();

}


/***************************************************

 *              Widget.h

 ***************************************************/

#ifndef WIDGET_H

#define WIDGET_H


#include <QWidget>


namespace Ui {

    class Widget;

}


class Widget : public QWidget {

    Q_OBJECT


public:

    explicit Widget(QWidget *parent = 0);

    ~Widget();


private:

    Ui::Widget *ui;

};


#endif // WIDGET_H



/***************************************************

 *              Widget.cpp

 ***************************************************/

#include "Widget.h"

#include "ui_Widget.h"


#include "MyModel.h"


Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {

    ui->setupUi(this);


    MyModel *model = new MyModel(1000, 20, this);

    ui->tableView->setModel(model);

    ui->tableView->horizontalHeader()->setStretchLastSection(true);

}


Widget::~Widget() {

    delete ui;

}



/***************************************************

 *              MyModel.h

 ***************************************************/

#ifndef MYMODEL_H

#define MYMODEL_H


#include <QAbstractTableModel>

#include <QHash>

#include <QList>


class MyModel : public QAbstractTableModel {

public:

    explicit MyModel(int rowCount = 1000, int pageSize = 10, QObject *parent = 0);


    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;

    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;

    virtual QVariant data( const QModelIndex &index, int role = Qt::DisplayRole) const;


private:

    QHash<int, int> m_pageHash; // key頁碼值, value是此頁的第一項數(shù)據(jù)在dataList中的下標值

    QList<int> m_dataList; // 儲數(shù)據(jù)的容器


    int m_pageSize; // 頁顯示的數(shù)據(jù)量

    int m_rowCount; // 顯示的行數(shù)


    // 這個下標是有規(guī)律可尋的, 但是是無序的.

    // 同一頁碼中的數(shù)值的下標是有序的, 不同頁碼的數(shù)據(jù)之間是無序的.

    int indexOfRow(int row) const;


    // 讀取數(shù)據(jù), 可是以模擬生成的, 實際工程中很可能是從數(shù)據(jù)庫中動態(tài)讀取

    void fetchData(int page);

};


#endif // MYMODEL_H



/***************************************************

 *              MyModel.cpp

 ***************************************************/

#include "MyModel.h"

#include <QDebug>


MyModel::MyModel(int rowCount, int pageSize, QObject *parent) : QAbstractTableModel(parent) {

    this->m_pageSize = pageSize;

    this->m_rowCount = rowCount;

}


int MyModel::columnCount(const QModelIndex &parent) const {

    Q_UNUSED(parent);


    return 1; // 以一列為示例, 如果是多列, data list保存的應該是對象

}


int MyModel::rowCount (const QModelIndex &parent) const {

    Q_UNUSED(parent);

    return m_rowCount;

}


QVariant MyModel::data( const QModelIndex &index, int role) const {

    if (!index.isValid()) { return QVariant(); }


    if (Qt::DisplayRole == role) {

        int i = indexOfRow(index.row());

        return m_dataList.at(i);

    }


    return QVariant();

}


int MyModel::indexOfRow(int row) const {

    int page = row / m_pageSize; // 頁顯示pageSize記錄


    if (!m_pageHash.contains(page)) {

        // 如果此面的數(shù)據(jù)不存在, 則讀取數(shù)據(jù)到 data list

        (const_cast<MyModel *>(this))->fetchData(page);

    }


    return m_pageHash.value(page) + row % m_pageSize;

}


// 每次加載數(shù)據(jù)時,如果是耗時任務, 可以使用進度條顯示加載進度

// 也可以取消加, 但是這個時候data()函數(shù)中返回一個非有效的index

void MyModel::fetchData(int page) {

    int pageStartIndex = m_dataList.count(); // 儲此頁碼與其所對應的開始下標值

    m_pageHash.insert(page, pageStartIndex);


    // 例如在這里使用分頁查詢, 從數(shù)據(jù)庫里讀取數(shù)據(jù)

    for (int i = 0; i < m_pageSize; ++i) {

        int data = page * m_pageSize + i;

        m_dataList.append(data);


        // 快速拖動滾動條, 可以看到中間很多沒必要的數(shù)據(jù)沒有產(chǎn)生.

        qDebug() << data;

    }

}


@import url(http://m.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2011-10-27 09:10 逛奔的蝸牛 閱讀(6352) 評論(1)  編輯 收藏 引用 所屬分類: Qt

評論

# re: Qt:使用Model-View,動態(tài)的加載顯示數(shù)據(jù) 2012-08-10 15:43 人在深圳
期待QTreeView代碼,樓主能不能辛苦下哈  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产日韩欧美亚洲| 亚洲一区二区日本| 亚洲一区在线播放| 午夜视频一区二区| 夜夜嗨av一区二区三区四区| 亚洲黄色一区| 一区二区三区视频在线| 免费在线观看精品| 国产亚洲精品综合一区91| 国产欧美激情| 欧美日韩视频一区二区| 亚洲精品国产精品国自产观看| 麻豆精品视频在线观看| 美女精品一区| 亚洲国产成人精品女人久久久 | 农村妇女精品| 免费h精品视频在线播放| 欧美人与性动交α欧美精品济南到| 欧美成人一区二区三区在线观看| 欧美黄色一区| 国产精品自拍一区| 亚洲国产va精品久久久不卡综合| aa级大片欧美| 欧美亚洲网站| 欧美国产国产综合| 一区二区三区视频在线观看| 欧美一区二区三区成人| 理论片一区二区在线| 欧美先锋影音| 1024日韩| 欧美在线亚洲在线| 欧美高清在线一区二区| 亚洲午夜激情网页| 免费91麻豆精品国产自产在线观看| 欧美三级电影精品| 在线观看日韩专区| 亚洲欧美另类在线| 亚洲韩国青草视频| 欧美一区亚洲| 国产精品成人一区二区网站软件| 伊人久久综合| 午夜影视日本亚洲欧洲精品| 亚洲国产91| 久久精品国产精品亚洲| 欧美性猛交视频| 日韩视频免费观看| 欧美ab在线视频| 亚洲欧美日韩高清| 亚洲黄色免费电影| 亚洲国产美女久久久久| 一本色道婷婷久久欧美| 麻豆精品在线视频| 亚洲在线观看免费| 免费欧美网站| 国产精品影音先锋| 在线亚洲电影| 亚洲福利视频一区| 久久久蜜桃精品| 国产视频一区二区在线观看| 亚洲视频图片小说| 亚洲欧洲在线看| 欧美大尺度在线观看| 91久久精品日日躁夜夜躁国产| 久久久免费av| 欧美在线亚洲一区| 国产欧美日韩中文字幕在线| 亚洲综合视频一区| 亚洲天天影视| 国产精品久久久久毛片软件| 亚洲网站视频| 99精品欧美一区| 欧美日韩免费网站| 亚洲一区一卡| 中文精品视频一区二区在线观看| 国产精品豆花视频| 欧美激情第4页| 99国产精品99久久久久久| 亚洲精品乱码视频| 欧美视频在线播放| 久久se精品一区精品二区| 小处雏高清一区二区三区| 国产精品毛片一区二区三区| 欧美在线啊v| 久久久久国产一区二区三区| 久久精品视频播放| 在线日本成人| 亚洲精品视频在线观看免费| 国产精品va| 久久精品一区蜜桃臀影院| 久久久久久97三级| 亚洲美女毛片| 亚洲图片欧美午夜| 玉米视频成人免费看| 亚洲精品乱码久久久久久久久| 欧美性猛交xxxx乱大交退制版| 久久久国际精品| 欧美精品福利在线| 久久xxxx| 欧美国产一区视频在线观看| 午夜精品久久久久久久白皮肤| 久久精品国产v日韩v亚洲| 一本色道久久88亚洲综合88| 午夜免费久久久久| 日韩视频久久| 欧美在线视频一区二区| 9色精品在线| 久久九九久精品国产免费直播 | 亚洲乱码视频| 国产亚洲va综合人人澡精品| 亚洲欧洲99久久| 亚洲美女在线看| 国产亚洲视频在线| 亚洲国产乱码最新视频| 国产精品久久激情| 蜜桃av一区二区| 国产精品夜夜夜| 亚洲欧洲精品一区二区三区不卡 | 国产日韩欧美一区| 亚洲人成网站在线播| 国产日韩欧美在线播放| 亚洲日韩欧美视频| 国产一区视频在线观看免费| 亚洲精品在线看| 亚洲国产高清一区| 欧美中文字幕精品| 亚洲欧美区自拍先锋| 欧美成人综合一区| 欧美成人一区二区三区在线观看| 国产精品三级视频| 99亚洲一区二区| 亚洲国产美女| 久久久久国产精品厨房| 国产精品黄色| 亚洲乱码一区二区| 9i看片成人免费高清| 欧美成人午夜激情| 免费一级欧美片在线播放| 国产伦精品一区二区三区视频孕妇 | 先锋影音久久久| 午夜亚洲精品| 日韩视频不卡中文| 日韩午夜一区| 欧美精品播放| 亚洲韩日在线| 日韩视频在线一区| 免费在线欧美视频| 蜜臀av性久久久久蜜臀aⅴ| 国产亚洲一区二区三区| 午夜精品电影| 久久精品一区二区三区中文字幕| 国产精品视频免费在线观看| 伊人成人网在线看| 亚洲欧美三级伦理| 欧美一区午夜精品| 国产亚洲亚洲| 久久久精品免费视频| 国产裸体写真av一区二区| 亚洲国产精品va在线观看黑人| 亚洲第一免费播放区| 99精品欧美| 欧美大片免费看| 国产精品久久二区二区| 亚洲人成网站色ww在线| 日韩一区二区高清| 亚洲精品视频在线观看网站| 欧美精品在线极品| 一区二区久久久久久| 午夜精品一区二区三区在线播放 | 亚洲黑丝在线| 亚洲一区999| 国产精品99一区二区| 午夜精品视频| 欧美黄色小视频| 亚洲欧美激情精品一区二区| 国产精品亚洲综合一区在线观看| 久久久久久久久久久久久久一区 | 99精品久久免费看蜜臀剧情介绍| 欧美黑人国产人伦爽爽爽| 一区二区三区三区在线| 久久久久久久久久久成人| 亚洲经典三级| 国产精品影音先锋| 猛男gaygay欧美视频| 国产视频精品网| 久久伊人精品天天| 夜夜嗨av一区二区三区网站四季av| 欧美在线中文字幕| 亚洲成色www8888| 欧美一区亚洲| 99国产精品视频免费观看| 久久午夜精品一区二区| 亚洲天堂男人| 欧美激情一区二区三区成人 | 麻豆久久久9性大片| 亚洲无限乱码一二三四麻| 久久久国产一区二区三区| 一区二区成人精品| 永久555www成人免费| 欧美激情中文不卡| 欧美一区影院|