最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT樹的具體項目實現(xiàn)

 更新時間:2023年06月28日 11:15:32   作者:程序員如山石  
本文主要介紹了QT樹的具體項目實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

理論

在Model/View結(jié)構(gòu)中,數(shù)據(jù)模型為視圖組件和代理組件提供存取數(shù)據(jù)的標準接口。在QT中,所有的數(shù)據(jù)模型類都從QAbstactItemModel繼承而來,不管底層的數(shù)據(jù)結(jié)構(gòu)是如何組織數(shù)據(jù)的,QAbstractItemModel的子類都以表格的層次結(jié)構(gòu)表示數(shù)據(jù),視圖組件通過這種規(guī)則來存取模型中的數(shù)據(jù),但是表現(xiàn)給用戶的形式不一樣。圖5-4是數(shù)據(jù)模型的3種常見表現(xiàn)形式。不管數(shù)據(jù)模型的表現(xiàn)形式是怎么樣的,數(shù)據(jù)模型中的存在數(shù)據(jù)的基本單元都是項(item), 每一個項有一個行號、一個列號,還有一個父項(parent item)。在列表和表格模式下,所有的項都有一個相同的頂層項(root item); 在樹狀結(jié)構(gòu)中,行號、列號、父項稍微復雜一點,但是由這3個參數(shù)完全可以定義一個項的位置,從而存取項的數(shù)據(jù)。

下圖就是QT官方提供的數(shù)據(jù)模型的幾種表現(xiàn)形式:

實踐情況

先定義一個treeModel,這也是最關(guān)鍵的地方:頭文件:

#ifndef TREEMODEL_H
#define TREEMODEL_H
#include <QList>
#include <QStandardItemModel>
#include <QObject>
class TreeModel
{
public:
    TreeModel(QObject *parent = nullptr);
    ~TreeModel();
    void initModel();
    QStandardItemModel* getStandardItemModel();
private:
    QStandardItemModel* m_standardItemModel;
};
#endif // TREEMODEL_H

cpp文件:

#pragma execution_character_set("utf-8")
#include "treemodel.h"
TreeModel::TreeModel(QObject *parent):m_standardItemModel(nullptr)
{
    m_standardItemModel = new QStandardItemModel(parent);
}
TreeModel::~TreeModel()
{
    if(nullptr == m_standardItemModel)
    {
        delete m_standardItemModel;
    }
}
void TreeModel::initModel()
{
    m_standardItemModel = new QStandardItemModel();
    // 2.使用model設(shè)置QTreeView表頭
    QStringList strHeads = QStringList(QString::fromUtf8("姓名"));
    strHeads.append(QString::fromUtf8("性別"));
    strHeads.append(QString::fromUtf8("年齡"));
    m_standardItemModel->setHorizontalHeaderLabels(strHeads);
    QStandardItem *item1 = new QStandardItem(QString::fromUtf8("四年級"));
    m_standardItemModel->setItem(0,0,item1);
    QStandardItem *item00 = new QStandardItem(QString::fromUtf8("張三"));
    QStandardItem *item10 = new QStandardItem(QString::fromUtf8("張四"));
    QStandardItem *item20 = new QStandardItem(QString::fromUtf8("張五"));
    QStandardItem *item01 = new QStandardItem(QString::fromUtf8("男"));
    QStandardItem *item11 = new QStandardItem(QString::fromUtf8("女"));
    QStandardItem *item21 = new QStandardItem(QString::fromUtf8("男"));
    QStandardItem *item02 = new QStandardItem(QString::fromUtf8("15"));
    QStandardItem *item12 = new QStandardItem(QString::fromUtf8("14"));
    QStandardItem *item22 = new QStandardItem(QString::fromUtf8("16"));
    m_standardItemModel->item(0,0)->setChild(0,0,item00);
    m_standardItemModel->item(0,0)->setChild(1,0,item10);
    m_standardItemModel->item(0,0)->setChild(2,0,item20);
    m_standardItemModel->item(0,0)->setChild(0,1,item01);
    m_standardItemModel->item(0,0)->setChild(1,1,item11);
    m_standardItemModel->item(0,0)->setChild(2,1,item21);
    m_standardItemModel->item(0,0)->setChild(0,2,item02);
    m_standardItemModel->item(0,0)->setChild(1,2,item12);
    m_standardItemModel->item(0,0)->setChild(2,2,item22);
    QStandardItem *item2 = new QStandardItem(QString::fromUtf8("五年級"));
    m_standardItemModel->setItem(1,0,item2);
    QStandardItem *item200 = new QStandardItem(QString::fromUtf8("李三"));
    QStandardItem *item210 = new QStandardItem(QString::fromUtf8("李四"));
    QStandardItem *item220 = new QStandardItem(QString::fromUtf8("李五"));
    QStandardItem *item201 = new QStandardItem(QString::fromUtf8("男"));
    QStandardItem *item211 = new QStandardItem(QString::fromUtf8("女"));
    QStandardItem *item221 = new QStandardItem(QString::fromUtf8("男"));
    QStandardItem *item202 = new QStandardItem(QString::fromUtf8("15"));
    QStandardItem *item212 = new QStandardItem(QString::fromUtf8("14"));
    QStandardItem *item222 = new QStandardItem(QString::fromUtf8("16"));
    m_standardItemModel ->item(1,0)->setChild(0,0,item200);
    m_standardItemModel->item(1,0)->setChild(1,0,item210);
    m_standardItemModel->item(1,0)->setChild(2,0,item220);
    m_standardItemModel->item(1,0)->setChild(0,1,item201);
    m_standardItemModel->item(1,0)->setChild(1,1,item211);
    m_standardItemModel->item(1,0)->setChild(2,1,item221);
    m_standardItemModel->item(1,0)->setChild(0,2,item202);
    m_standardItemModel->item(1,0)->setChild(1,2,item212);
    m_standardItemModel->item(1,0)->setChild(2,2,item222);
}
QStandardItemModel *TreeModel::getStandardItemModel()
{
    return this->m_standardItemModel;
}

界面類:

#pragma execution_character_set("utf-8")
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <unistd.h>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    treeModel = new TreeModel(this);
    treeModel->initModel();
    // 槽函數(shù)
    connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this, &MainWindow::_on_treeView_current_changed);
    connect(ui->treeView, &QTreeView::customContextMenuRequested, this, &MainWindow::_on_treeView_MenuPopup);
    ui->treeView->setModel(treeModel->getStandardItemModel());
    ui->treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    // 右鍵菜單
    ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
    ui->treeView->expandAll();
}
MainWindow::~MainWindow()
{
    delete ui;
}

實現(xiàn)效果:

總結(jié)

其實這里就是這樣一個類似的數(shù)據(jù)結(jié)構(gòu):

struct item{
int row;
int rank;
item parent;
QString data;
vector<item> childrenList;
    }

記準官方這張圖,就明白怎么用了,其實,很簡單:

到此這篇關(guān)于QT樹的具體項目實現(xiàn)的文章就介紹到這了,更多相關(guān)QT樹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Visual Studio Code (VSCode) 配置搭建 C/C++ 開發(fā)編譯環(huán)境的流程

    Visual Studio Code (VSCode) 配置搭建 C/C++ 開發(fā)編譯環(huán)境的流程

    記得N年前剛開始接觸編程時,使用的是Visual C++6.0,下面這個可愛的圖標很多人一定很熟悉。不過今天想嘗鮮新的工具 Visual Studio Code 來搭建C/C++開發(fā)環(huán)境,感興趣的朋友一起看看吧
    2021-09-09
  • C++ 引用折疊(Reference Collapsing)的具體使用

    C++ 引用折疊(Reference Collapsing)的具體使用

    本文主要介紹了C++ 引用折疊使用,,引用折疊主要在模板類型推導、auto、decltype等場景中發(fā)生,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-05-05
  • 一波C語言二元查找樹算法題目解答實例匯總

    一波C語言二元查找樹算法題目解答實例匯總

    這篇文章主要介紹了一波C語言二元查找樹算法題目解答實例匯總,包括按層次遍歷和轉(zhuǎn)換為鏡像等基本算法題目,需要的朋友可以參考下
    2016-03-03
  • C++智能指針shared_ptr與weak_ptr的實現(xiàn)分析

    C++智能指針shared_ptr與weak_ptr的實現(xiàn)分析

    shared_ptr是一個標準的共享所有權(quán)的智能指針,允許多個指針指向同一個對象,定義在 memory 文件中,命名空間為 std,這篇文章主要介紹了C++ 中 shared_ptr weak_ptr,需要的朋友可以參考下
    2022-09-09
  • C語言實現(xiàn)快速排序

    C語言實現(xiàn)快速排序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)快速排序算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • C++中delete和delete[]的區(qū)別

    C++中delete和delete[]的區(qū)別

    這篇文章主要介紹了C++中delete和delete[]的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • C++ auto類型說明符

    C++ auto類型說明符

    在C++11中引入了auto類型說明符,用它就能讓編譯器替我們?nèi)シ治霰磉_式所屬的類型。當然,auto變量必須有初始值,這樣編譯器才能推斷其類型
    2016-03-03
  • C++實現(xiàn)LeetCode(131.拆分回文串)

    C++實現(xiàn)LeetCode(131.拆分回文串)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(131.拆分回文串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Linux下C語言的幾道經(jīng)典面試題小結(jié)(分享)

    Linux下C語言的幾道經(jīng)典面試題小結(jié)(分享)

    下面小編就為大家?guī)硪黄狶inux下C語言的幾道經(jīng)典面試題小結(jié)(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Qt框架中QPushButton 和 QToolButton的使用小結(jié)

    Qt框架中QPushButton 和 QToolButton的使用小結(jié)

    本文對比了Qt框架中的兩種按鈕控件QPushButton和QToolButton,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11

最新評論

武夷山市| 耿马| 视频| 贵阳市| 锡林郭勒盟| 航空| 潜山县| 揭西县| 锡林郭勒盟| 固原市| 固阳县| 铁力市| 枣阳市| 永康市| 济阳县| 涪陵区| 西城区| 台山市| 江北区| 轮台县| 伊春市| 香港 | 大安市| 三原县| 莱州市| 莒南县| 盐山县| 开封市| 巴林右旗| 扎兰屯市| 昌江| 宁南县| 泰来县| 农安县| 裕民县| 永康市| 高雄县| 西华县| 灵台县| 金门县| 赤水市|