国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

界面開(kāi)發(fā)框架Qt新手入門教程 - 可編輯樹(shù)模型的示例(一)

這篇具有很好參考價(jià)值的文章主要介紹了界面開(kāi)發(fā)框架Qt新手入門教程 - 可編輯樹(shù)模型的示例(一)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Qt?是目前最先進(jìn)、最完整的跨平臺(tái)C++開(kāi)發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫,所有平臺(tái)無(wú)差別運(yùn)行,更提供了幾乎所有開(kāi)發(fā)過(guò)程中需要用到的工具。如今,Qt已被運(yùn)用于超過(guò)70個(gè)行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬(wàn)設(shè)備及應(yīng)用。

點(diǎn)擊獲取Qt Widget組件下載(Q技術(shù)交流:166830288)

樹(shù)項(xiàng)類定義

該類提供包含多個(gè)數(shù)據(jù)的簡(jiǎn)單項(xiàng),包括有關(guān)其父項(xiàng)和子項(xiàng)的信息:TreeItem

class TreeItem
{
public:
explicit TreeItem(const QList<QVariant> &data, TreeItem *parent = nullptr);
~TreeItem();

TreeItem *child(int number);
int childCount() const;
int columnCount() const;
QVariant data(int column) const;
bool insertChildren(int position, int count, int columns);
bool insertColumns(int position, int columns);
TreeItem *parent();
bool removeChildren(int position, int count);
bool removeColumns(int position, int columns);
int childNumber() const;
bool setData(int column, const QVariant &value);

private:
QList<TreeItem *> childItems;
QList<QVariant> itemData;
TreeItem *parentItem;
};

我們將 API 設(shè)計(jì)為類似于?QAbstractItemModel?提供的 API,為每個(gè)項(xiàng)目提供返回信息列數(shù)、讀取和寫入數(shù)據(jù)以及插入和刪除列的函數(shù)。但是,我們通過(guò)提供處理“子”而不是“行”的函數(shù)來(lái)明確項(xiàng)目之間的關(guān)系。

每個(gè)項(xiàng)都包含一個(gè)指向子項(xiàng)的指針列表、一個(gè)指向其父項(xiàng)的指針,以及一個(gè)?QVariant?對(duì)象列表,這些對(duì)象對(duì)應(yīng)于模型中給定行的列中保存的信息。

樹(shù)項(xiàng)類實(shí)現(xiàn)

每個(gè)都由數(shù)據(jù)列表和一個(gè)可選的父項(xiàng)構(gòu)造:TreeItem

TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
: itemData(data), parentItem(parent)
{}

最初,每個(gè)項(xiàng)目都沒(méi)有子項(xiàng)。這些函數(shù)使用后面介紹的函數(shù)添加到項(xiàng)的內(nèi)部成員中。childItemsinsertChildren()

析構(gòu)函數(shù)確保在刪除項(xiàng)本身時(shí)刪除添加到項(xiàng)的每個(gè)子項(xiàng):

TreeItem::~TreeItem()
{
qDeleteAll(childItems);
}

由于每個(gè)項(xiàng)目都存儲(chǔ)指向其父項(xiàng)的指針,因此該函數(shù)很簡(jiǎn)單:parent()

TreeItem *TreeItem::parent()
{
return parentItem;
}

三個(gè)函數(shù)提供有關(guān)項(xiàng)的子項(xiàng)的信息。 從內(nèi)部子項(xiàng)列表中返回特定的子項(xiàng):child()

TreeItem *TreeItem::child(int number)
{
if (number < 0 || number >= childItems.size())
return nullptr;
return childItems.at(number);
}

該函數(shù)返回子項(xiàng)的總數(shù):childCount()

int TreeItem::childCount() const
{
return childItems.count();
}

該函數(shù)用于確定子項(xiàng)在其父項(xiàng)的子項(xiàng)列表中的索引。它直接訪問(wèn)父級(jí)的成員以獲取此信息:childNumber()childItems

int TreeItem::childNumber() const
{
if (parentItem)
return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
return 0;
}

根項(xiàng)沒(méi)有父項(xiàng);對(duì)于此項(xiàng),我們返回零以與其他項(xiàng)保持一致。

該函數(shù)僅返回?QVariant?對(duì)象內(nèi)部列表中的元素?cái)?shù):columnCount()itemData

int TreeItem::columnCount() const
{
return itemData.count();
}

使用函數(shù)檢索數(shù)據(jù),該函數(shù)訪問(wèn)列表中的相應(yīng)元素:data()itemData

QVariant TreeItem::data(int column) const
{
if (column < 0 || column >= itemData.size())
return QVariant();
return itemData.at(column);
}

數(shù)據(jù)是使用函數(shù)設(shè)置的,該函數(shù)僅將有效列表索引的值存儲(chǔ)在列表中,對(duì)應(yīng)于模型中的列值:setData()itemData

bool TreeItem::setData(int column, const QVariant &value)
{
if (column < 0 || column >= itemData.size())
return false;

itemData[column] = value;
return true;
}

為了使模型的實(shí)現(xiàn)更容易,我們返回 true 以指示數(shù)據(jù)已成功設(shè)置。

可編輯模型通常需要調(diào)整大小,以便插入和刪除行和列。在模型中給定模型索引下插入行會(huì)導(dǎo)致在相應(yīng)的項(xiàng)中插入新的子項(xiàng),由以下函數(shù)處理:insertChildren()

bool TreeItem::insertChildren(int position, int count, int columns)
{
if (position < 0 || position > childItems.size())
return false;

for (int row = 0; row < count; ++row) {
QList<QVariant> data(columns);
TreeItem *item = new TreeItem(data, this);
childItems.insert(position, item);
}

return true;
}

這可確保使用所需列數(shù)創(chuàng)建新項(xiàng),并將其插入到內(nèi)部列表中的有效位置。使用以下函數(shù)刪除項(xiàng)目:childItemsremoveChildren()

bool TreeItem::removeChildren(int position, int count)
{
if (position < 0 || position + count > childItems.size())
return false;

for (int row = 0; row < count; ++row)
delete childItems.takeAt(position);

return true;
}

如上所述,用于插入和刪除列的函數(shù)與用于插入和刪除子項(xiàng)的函數(shù)使用方式不同,因?yàn)樗鼈儜?yīng)該在樹(shù)中的每個(gè)項(xiàng)上調(diào)用。我們通過(guò)在項(xiàng)目的每個(gè)子項(xiàng)上遞歸調(diào)用此函數(shù)來(lái)實(shí)現(xiàn)這一點(diǎn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-460842.html

bool TreeItem::insertColumns(int position, int columns)
{
if (position < 0 || position > itemData.size())
return false;

for (int column = 0; column < columns; ++column)
itemData.insert(position, QVariant());

for (TreeItem *child : std::as_const(childItems))
child->insertColumns(position, columns);

return true;
}

到了這里,關(guān)于界面開(kāi)發(fā)框架Qt新手入門教程 - 可編輯樹(shù)模型的示例(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何在Ubuntu上編輯和運(yùn)行C程序(新手入門)

    如何在Ubuntu上編輯和運(yùn)行C程序(新手入門)

    兜兜轉(zhuǎn)轉(zhuǎn)還是想再深入的學(xué)習(xí)C語(yǔ)言,因此打算制定一個(gè)學(xué)習(xí)C語(yǔ)言的計(jì)劃來(lái)不斷推薦學(xué)習(xí)C語(yǔ)言。歡迎各位志同道合的同志加入和交流 。 qq群·:829876251 目前而言C語(yǔ)言主要運(yùn)用在底層模塊(驅(qū)動(dòng)、解碼器、算法實(shí)現(xiàn)),服務(wù)器(后端服務(wù)器)、嵌入式設(shè)備(手機(jī)等電子產(chǎn)品上的軟件

    2024年02月07日
    瀏覽(24)
  • 微服務(wù)框架Consul--新手入門

    微服務(wù)框架Consul--新手入門

    Consul 是由 HashiCorp 開(kāi)發(fā)的一款軟件工具,提供了一組功能,用于服務(wù)發(fā)現(xiàn)、配置管理和網(wǎng)絡(luò)基礎(chǔ)設(shè)施自動(dòng)化。它旨在幫助組織管理現(xiàn)代分布式和微服務(wù)架構(gòu)系統(tǒng)的復(fù)雜性。以下是Consul的一些關(guān)鍵方面和功能: 服務(wù)發(fā)現(xiàn):Consul 允許服務(wù)自行注冊(cè)并以動(dòng)態(tài)和自動(dòng)化的方式發(fā)現(xiàn)其

    2024年02月07日
    瀏覽(31)
  • HLS新手入門教程

    HLS新手入門教程

    HLS是一種高級(jí)綜合技術(shù),它允許開(kāi)發(fā)人員使用高級(jí)語(yǔ)言(如C、C++和SystemC)來(lái)描述數(shù)字電路的行為和功能,然后將其轉(zhuǎn)換為硬件電路實(shí)現(xiàn)。這種轉(zhuǎn)換過(guò)程是自動(dòng)完成的,因此開(kāi)發(fā)人員無(wú)需手動(dòng)編寫硬件描述語(yǔ)言(HDL)。 HLS的主要目的是簡(jiǎn)化FPGA設(shè)計(jì)流程,提高設(shè)計(jì)效率和設(shè)計(jì)質(zhì)

    2024年02月02日
    瀏覽(35)
  • 新手入門Jenkins自動(dòng)化部署入門詳細(xì)教程

    新手入門Jenkins自動(dòng)化部署入門詳細(xì)教程

    在實(shí)際開(kāi)發(fā)中,我們經(jīng)常要一邊開(kāi)發(fā)一邊測(cè)試,當(dāng)然這里說(shuō)的測(cè)試并不是程序員對(duì)自己代碼的單元測(cè)試,而是同組程序員將代碼提交后,由測(cè)試人員測(cè)試; 或者前后端分離后,經(jīng)常會(huì)修改接口,然后重新部署; 這些情況都會(huì)涉及到頻繁的打包部署; 手動(dòng)打包常規(guī)步驟: 1.提

    2024年02月13日
    瀏覽(31)
  • StarkNet新手入門教程:教你用bitget 錢包入門

    StarkNet新手入門教程:教你用bitget 錢包入門

    理想的Starknet (web3.bitget.com/zh/assets/starknet-wallet) 錢包取決于個(gè)人喜好,同時(shí)考慮安全性、用戶友好性、帳戶恢復(fù)選項(xiàng)和多通證支持等因素。盡管如此,無(wú)論您使用 Starknet (STRK) 的目的是持有還是交易,Bitget Wallet 都是您管理 STRK 以及其他以太坊和 Optimism 加密資產(chǎn)的理想錢包選擇

    2024年03月12日
    瀏覽(28)
  • 【Jmeter】壓力測(cè)試新手入門教程

    【Jmeter】壓力測(cè)試新手入門教程

    壓力測(cè)試是每一個(gè)Web應(yīng)用程序上線之前都需要做的一個(gè)測(cè)試,他可以幫助我們發(fā)現(xiàn)系統(tǒng)中的瓶頸問(wèn)題,減少發(fā)布到生產(chǎn)環(huán)境后出問(wèn)題的幾率;預(yù)估系統(tǒng)的承載能力,使我們能根據(jù)其做出一些應(yīng)對(duì)措施。所以壓力測(cè)試是一個(gè)非常重要的步驟,下面我?guī)Т蠹襾?lái)使用一款壓力測(cè)試工

    2024年04月15日
    瀏覽(22)
  • qt qtcreator qt+vs 編譯器
關(guān)于QT、QT creator和編譯器,新手入門必知的一些知識(shí)關(guān)于QT、QT creator和編譯器,新手入門必知的一些知識(shí)_qt和qtcreator的區(qū)別_炫彩靈感的博客-CSDN博客

    qt qtcreator qt+vs 編譯器 關(guān)于QT、QT creator和編譯器,新手入門必知的一些知識(shí)關(guān)于QT、QT creator和編譯器,新手入門必知的一些知識(shí)_qt和qtcreator的區(qū)別_炫彩靈感的博客-CSDN博客

    對(duì)于一個(gè)新手而言,基本體會(huì)如下: Qt Creator Qt Creator優(yōu)勢(shì) 可以實(shí)現(xiàn)Ui和代碼無(wú)縫切換。(VS不行) 對(duì)于漢字的支持更好 提示功能做的更好。 比如:#include等,敲出#inc即有提示。 qmake非常好用 項(xiàng)目管理更方便,可以添加pri之類的來(lái)管理子模塊 Qt Creator劣勢(shì)(IDE本身巨大劣勢(shì))

    2024年02月11日
    瀏覽(87)
  • Git 新手快速入門教程

    Git 新手快速入門教程

    1. 何為版本控制 版本控制是一種記錄文件變化的系統(tǒng),可以跟蹤文件的修改歷史,并允許用戶在不同版本之間進(jìn)行比較、恢復(fù)或合并。它主要用于軟件開(kāi)發(fā)過(guò)程中管理代碼的變更,但也可以應(yīng)用于任何需要跟蹤文件變更的場(chǎng)景。 版本控制系統(tǒng)(VCS)可以幫助團(tuán)隊(duì)協(xié)作開(kāi)發(fā),

    2024年04月26日
    瀏覽(26)
  • 電腦黑客技術(shù)新手入門,自學(xué)黑客技術(shù)入門教程

    電腦黑客技術(shù)新手入門,自學(xué)黑客技術(shù)入門教程

    最近經(jīng)常有小伙伴聯(lián)系我說(shuō)要學(xué)黑客技術(shù),當(dāng)然目的各種各樣,有的就是覺(jué)得黑客很酷,單純想要學(xué)技術(shù),還有的就是想找人幫忙攻擊賭博網(wǎng)站或者監(jiān)聽(tīng)別人的電話(以女朋友的電話居多),對(duì)于想要單純學(xué)技術(shù)的朋友我很歡迎他們問(wèn)我問(wèn)題,但對(duì)于那些想做違法事情的人我

    2024年02月10日
    瀏覽(23)
  • Windows 驅(qū)動(dòng)開(kāi)發(fā) 新手入門(四)

    本系列所有文章 Windows 驅(qū)動(dòng)開(kāi)發(fā) 新手入門(一) Windows 驅(qū)動(dòng)開(kāi)發(fā) 新手入門(二) Windows 驅(qū)動(dòng)開(kāi)發(fā) 新手入門(三) Windows 驅(qū)動(dòng)開(kāi)發(fā) 新手入門(四) 本篇文章介紹一下設(shè)備對(duì)象,這是寫驅(qū)動(dòng)過(guò)濾的基礎(chǔ),比如鍵盤,串口等等的過(guò)濾。 PDO 是 Phsical Device Object 的縮寫,直譯就是物

    2023年04月08日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包