欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

理論

在Model/View結(jié)構(gòu)中,數(shù)據(jù)模型為視圖組件和代理組件提供存取數(shù)據(jù)的標(biāo)準(zhǔn)接口。在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ù)的基本單元都是項(xiàng)(item), 每一個(gè)項(xiàng)有一個(gè)行號(hào)、一個(gè)列號(hào),還有一個(gè)父項(xiàng)(parent item)。在列表和表格模式下,所有的項(xiàng)都有一個(gè)相同的頂層項(xiàng)(root item); 在樹狀結(jié)構(gòu)中,行號(hào)、列號(hào)、父項(xiàng)稍微復(fù)雜一點(diǎn),但是由這3個(gè)參數(shù)完全可以定義一個(gè)項(xiàng)的位置,從而存取項(xiàng)的數(shù)據(jù)。

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

實(shí)踐情況

先定義一個(gè)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("四年級(jí)"));
    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("五年級(jí)"));
    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;
}

實(shí)現(xiàn)效果:

總結(jié)

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

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

記準(zhǔn)官方這張圖,就明白怎么用了,其實(shí),很簡單:

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

相關(guān)文章

  • C++之list容器模擬實(shí)現(xiàn)方式

    C++之list容器模擬實(shí)現(xiàn)方式

    這篇文章主要介紹了C++之list容器模擬實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 如何優(yōu)雅地使用c語言編寫爬蟲

    如何優(yōu)雅地使用c語言編寫爬蟲

    如何優(yōu)雅地使用c語言編寫爬蟲,本文介紹cspider爬蟲庫,這個(gè)cspider爬蟲庫的使命在于,我們能夠使用c語言,依然能夠優(yōu)雅地編寫爬蟲程序,需要的朋友可以參考下
    2015-12-12
  • C++實(shí)現(xiàn)std::set的示例項(xiàng)目

    C++實(shí)現(xiàn)std::set的示例項(xiàng)目

    std::set是C++標(biāo)準(zhǔn)庫中的關(guān)聯(lián)容器,提供有序唯一元素集合,本文就來介紹一下std::set的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Matlab實(shí)現(xiàn)簡單擴(kuò)頻語音水印算法詳解

    Matlab實(shí)現(xiàn)簡單擴(kuò)頻語音水印算法詳解

    本文主要介紹了通過MATLAB設(shè)計(jì)并實(shí)現(xiàn)一種基于音頻的擴(kuò)頻水印算法,從而了解參數(shù)對(duì)擴(kuò)頻水印算法性能的影響。代碼具有一定的價(jià)值,感興趣的小伙伴可以關(guān)注一下
    2021-11-11
  • 詳解C++11 原始字符串字面量(Json字符串表達(dá)更方便)

    詳解C++11 原始字符串字面量(Json字符串表達(dá)更方便)

    原始字符串字面量(Raw String Literal)是C++11引入的一種字符串表示方式,用于簡化字符串的定義,特別是當(dāng)字符串中包含大量特殊字符(如換行符、雙引號(hào)等)時(shí),這篇文章給大家介紹C++11原始字符串字面量(Json字符串表達(dá)更方便)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-03-03
  • C++中關(guān)鍵字 override 的簡析

    C++中關(guān)鍵字 override 的簡析

    這篇小文來聊聊 C++中的關(guān)鍵字 override,它的含義其實(shí)兩句話就說完了,但為了敘述的完整性,讓我們從虛函數(shù)說起。感興趣的小伙伴可以跟著小編一起學(xué)習(xí)下面文章內(nèi)容
    2021-09-09
  • C語言中初始、增加和刪除進(jìn)程信號(hào)的操作方法簡介

    C語言中初始、增加和刪除進(jìn)程信號(hào)的操作方法簡介

    這篇文章主要介紹了C語言中初始、增加和刪除進(jìn)程信號(hào)的操作方法簡介,分別是sigemptyset函數(shù)、sigaddset函數(shù)和sigdelset函數(shù)的用法,需要的朋友可以參考下
    2015-09-09
  • 詳解 linux c++的編譯器g++的基本使用

    詳解 linux c++的編譯器g++的基本使用

    這篇文章主要介紹了詳解 linux c++的編譯器g++的基本使用的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語言不定長數(shù)組及初始化方法

    C語言不定長數(shù)組及初始化方法

    今天小編就為大家分享一篇C語言不定長數(shù)組及初始化方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 解析設(shè)計(jì)模式中的Prototype原型模式及在C++中的使用

    解析設(shè)計(jì)模式中的Prototype原型模式及在C++中的使用

    這篇文章主要介紹了設(shè)計(jì)模式中的Prototype原型模式及在C++中的使用,需要的朋友可以參考下
    2016-03-03

最新評(píng)論