【Qt】Model/View


【觀念】

  • Model-View 觀念
    • Model 用來獲取數據。
    • View 用來顯示數據。
    • Delegate(委任) 用來編輯。
  • Model –View 示意圖 (摘自網路)
     image
  • 三種 View 的差異 (摘自網路)
    image

【步驟】

  1. 在 Qt Designer 中,一個是 Model-Based,一個是 Item-Based。
    Model-Based 拖曳到GUI後的名稱是 View 型態 (i.e. listView/treeView/tableView/ColumnView)。
    而 Item-Based 拖曳到GUI後的名稱是 Widget 型態。
    image
  2. 將 Model-Based 的元件(List View//Tree View/ Table View/Column View)拖曳到GUI。
    image
  3. 加入以下程式碼(此下程式碼只提示重點)
    #include <QStringList>
    #include <QAbstractItemModel>
    #include <QStringListModel>
    #include <QListView>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        QStringList animals;
        animals << "bear" << "rabbit" << "zebra" << "monkey";
        QAbstractItemModel *model = new QStringListModel(animals);
        ui->listView->setModel(model);
        ui->treeView->setModel(model);
        ui->tableView->setModel(model);
        ui->columnView->setModel(model);
    }
  4. 依序為 List View,Tree View,Table View,Column View 的顯示結果
    image
  5. 將第一個 bear 替換成 lion,會發現其他 View 會跟著一起改。
    這就是 Model-View 分開的好處。
    image

【問題】

【備註】

  • Qt Model/View 学习笔记 (二),利用Splitter再煮視窗裡面切出兩個小視窗,
    左邊顯示 TreeView,右邊為 ListView,而底層都是透過 model(來至 QDirModel) 去撈資料。
    目前不解為何要將 splitter 放於 QTreeView。
    QTreeView *tree = new QTreeView(splitter);


【參考】

 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com