QStringListModel 綁定到QListView

1.QStringListModel 綁定到listView,從而實現MV模型視圖
2.通過QStringListModel的新增、刪除、插入、上下移動,listView來展示出來
3.下移動一行,傳入curRow+2 的個人理解

布局

.h聲明?

private:QStringList m_strList;QStringListModel *m_model;

.cpp?

#include "listmodelviewexample.h"
#include "ui_listmodelviewexample.h"ListModelViewExample::ListModelViewExample(QWidget *parent): QMainWindow(parent), ui(new Ui::ListModelViewExample)
{ui->setupUi(this);m_strList<<"北京"<<"上海"<<"廣州"<<"深圳"<<"天津"<<"成都"<<"山東"<<"河南"<<"河北";m_model= new QStringListModel(this);m_model->setStringList(m_strList);ui->listView->setModel(m_model);ui->chkEditable->setChecked(true);ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);
}ListModelViewExample::~ListModelViewExample()
{delete ui;
}void ListModelViewExample::on_btnIniList_clicked()
{m_model->setStringList(m_strList);//重新載入
}void ListModelViewExample::on_btnListClear_clicked()
{m_model->removeRows(0,m_model->rowCount());
}void ListModelViewExample::on_chkEditable_clicked(bool checked)
{if(checked)ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);elseui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}void ListModelViewExample::on_btnListAppend_clicked()
{m_model->insertRow(m_model->rowCount());QModelIndex index= m_model->index(m_model->rowCount()-1,0);m_model->setData(index,"new Item",Qt::DisplayRole);ui->listView->setCurrentIndex(index);
}void ListModelViewExample::on_btnListInsert_clicked()
{QModelIndex index= ui->listView->currentIndex();m_model->insertRow(index.row());m_model->setData(index,Qt::AlignRight,Qt::TextAlignmentRole);ui->listView->setCurrentIndex(index);
}void ListModelViewExample::on_btnListDelete_clicked()
{QModelIndex index= ui->listView->currentIndex();m_model->removeRow(index.row());
}void ListModelViewExample::on_btnListMoveUp_clicked()
{int curRow = ui->listView->currentIndex().row();QModelIndex index = QModelIndex();/*moveRow這個方法,為什么要-1? 我理解如下,1. 在目標位置curRow-1插入一行 插入的新行的行號為curRow-22. 復制原curRow行到目標位置curRow-23. 刪除原curRow行*/m_model->moveRow(index,curRow,index,curRow-1);
}void ListModelViewExample::on_btnListMoveDown_clicked()
{int curRow = ui->listView->currentIndex().row();QModelIndex index = QModelIndex();/*moveRow這個方法,為什么要+2? 我理解如下,1. 在目標位置curRow+2插入一行2. 復制curRow行到目標位置curRow+13. 刪除curRow行*/m_model->moveRow(index,curRow,index,curRow+2);
}void ListModelViewExample::on_btnClearText_clicked()
{ui->plainTextEdit->clear();
}void ListModelViewExample::on_btnListImport_clicked()
{QStringList tmpList = m_model->stringList();for(int i=0;i<tmpList.size();i++){ui->plainTextEdit->appendPlainText(tmpList.at(i));}
}void ListModelViewExample::on_btnListSort_clicked(bool checked)
{if(checked)m_model->sort(0,Qt::AscendingOrder);elsem_model->sort(0,Qt::DescendingOrder);
}void ListModelViewExample::on_listView_clicked(const QModelIndex &index)
{QString str1 = QString::asprintf("模型索引行號:row=%d,column=%d;\t",index.row(),index.column());QVariant var = m_model->data(index,Qt::DisplayRole);QString str2 = var.toString();int curRow = ui->listView->currentIndex().row();QString str3 = QString::asprintf(";\tlistView:row=%d",curRow);ui->statusbar->showMessage(str1+ str2+ str3);}

?QStringListModel->moveRow? 上移傳入curRow-1? 下移傳入curRow+2? 這是為什么?有些別扭

?

inline bool QAbstractItemModel::moveRow(const QModelIndex &sourceParent, int sourceRow,const QModelIndex &destinationParent, int destinationChild)

以下僅為個人理解。

destinationChild:創建了一個新行,該新行需要插入的位置,插入新行后,原行刪除。

如下移一行,就需要在curRow+2的前面插入一行,插入的新行的行號為curRow+2,刪除原行后變成curRow+1

再如上移一行,需要在curRow-1的前面插入一行,插入的新行號變成了curRow-1,而原curRow-1變成了curRow行號

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41207.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41207.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Matlab|基于改進鯨魚優化算法的微網系統能量優化管理matlab-源碼

目錄 一、主要內容 二、部分代碼 三、運行結果 四、下載鏈接 一、主要內容 該程序為《基于改進鯨魚優化算法的微網系統能量優化管理》源碼&#xff0c;主要內容如下&#xff1a; 針對包含多種可再生能源的冷熱電聯供型微網系統的能量優化問題&#xff0c;為了優化其運行過程…

中級職稱如何查詢真假呢?

關于中級職稱如何查詢真假&#xff0c;大家都會有疑問&#xff0c;辦到職稱的人員肯定是想查一查手里的證書&#xff0c;那么沒有證書的人員也想了解一下&#xff0c;今天甘建二告訴大家幾個通俗的職稱查詢方式&#xff1a; 1.電話查詢&#xff08;以前辦理職稱是這種查詢方式…

20W+喜愛的Pathview網頁版 | 整合表達譜數據KEGG通路可視化

Pathview網站簡介 網址&#xff1a;https://pathview.uncc.edu/ 前段時間介紹了一個R包 — Pathview。它可以整合表達譜數據并可視化KEGG通路&#xff0c;操作是先自動下載KEGG官網上的通路圖&#xff0c;然后整合輸入數據對通路圖進行再次渲染。從而對KEGG通路圖進行一定程度…

uniapp+nodejs實現小程序支付

1.準備商戶號、企業級小程序(或者個體工商戶級別的) 2.在小程序端調用uni.login獲取code&#xff0c;傳遞給后端 uni.login({success: loginRes > {uni.request({url: "http://127.0.0.1:3003/wxpay/pay",data: {code: loginRes.code},method: "get",…

RedHat9 | kickstart無人值守批量安裝

一、知識補充 kickstart Kickstart是一種用于Linux系統安裝的自動化工具&#xff0c;它通過一個名為ks.cfg的配置文件來定義Linux安裝過程中的各種參數和設置。 kickstart的工作原理 Kickstart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的各種參數&#xff0c;…

漏洞分析 | PHP CGI Windows平臺遠程代碼執行漏洞(CVE-2024-4577)

漏洞概述 PHP CGI&#xff08;Common Gateway Interface&#xff09;是在Windows平臺上運行PHP的一種方式。CGI是一種標準接口&#xff0c;允許Web服務器與外部應用程序&#xff08;如PHP腳本&#xff09;進行交互&#xff0c;從而生成動態網頁內容。 近期&#xff0c;PHP發布…

Request safe_get 小工具

接口安全獲取請求參數小工具&#xff08; python&#xff09; flask import logging import traceback from flask import (Blueprint, request, Response, jsonify, g, send_file)def safe_get(req: request, attr: str, defaultNone):try:if attr in req.form:return req.f…

拍攝泡咖啡的劇本!

泡咖啡的過程可以是一種放松和享受的儀式&#xff0c;同時也是一個記錄生活美好瞬間的好機會。以下是一些步驟和提示&#xff0c;幫助您記錄泡咖啡的過程&#xff1a; 1. **準備材料**&#xff1a; 確保您有新鮮的咖啡豆、磨豆機、咖啡壺、濾紙、熱水和杯子。 2. **選擇音樂**&…

Logstash安裝插件失敗的問題

Logstash安裝插件失敗的問題 安裝 logstash-output-jdbc 失敗 報錯為&#xff1a; Unable to download data from https://rubygems.org - Net::OpenTimeout: Failed to open TCP connection to rubygems.org:443 (execution expired) (https://rubygems.org/latest_specs.4.…

【算法 - 哈希表】兩數之和

這里寫自定義目錄標題 兩數之和題目解析思路解法一 &#xff1a;暴力枚舉 依次遍歷解法二 &#xff1a;使用哈希表來做優化 核心邏輯為什么之前的暴力枚舉策略不太好用了&#xff1f;所以&#xff0c;這就是 這道題選擇 固定一個數&#xff0c;再與其前面的數逐一對比完后&…

Linux系統(CentOS)安裝iptables防火墻

1&#xff0c;先檢查是否安裝了iptables 檢查安裝文件-執行命令&#xff1a;rpm -qa|grep iptables 檢查安裝文件-執行命令&#xff1a;service iptables status 2&#xff0c;如果安裝了就卸裝(iptables-1.4.21-35.el7.x86_64 是上面命令查出來的版本) 執行命令&#xff1a…

藍牙信標和藍牙標簽我們如何區分,區分方法有哪些?

藍牙信標和藍牙標簽其實是兩種不同的技術&#xff0c;很多人可能會把藍牙信標和藍牙標簽搞混&#xff0c;因為區分不開來&#xff0c;但實際上&#xff0c;區分這兩種技術也很簡單&#xff0c;因為它們各自都有不一樣的特性&#xff0c;通過這些特性&#xff0c;我們也能正常區…

相機光學(二十四)——CRA角度

CRA角度 0.參考資料1.什么是CRA角度2.為什么 CRA 會導致luma shading3.為什么 CRA 會導致color shading4.CRA相差過大的具體表現5.CRA Matching6.怎樣選擇sensor的CRA 0.參考資料 1.芯片CRA角度與鏡頭的匹配關系&#xff08;一&#xff09; ??2.芯片CRA角度與鏡頭選型的匹配關…

爬蟲進階:Selenium與Ajax的無縫集成

爬蟲與Ajax的挑戰 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;允許網頁在不重新加載整個頁面的情況下與服務器交換數據并更新部分內容。這為用戶帶來了更好的體驗&#xff0c;但同時也使得爬蟲在抓取數據時面臨以下挑戰&#xff1a; 動態內容加載&#xff…

go語言 函數和包

go語言 函數和包 一、函數 在Go語言中&#xff0c;函數是執行特定任務的自包含代碼塊。 1.函數的定義 函數通過func關鍵字定義&#xff0c;格式如下&#xff1a; func 函數名(形參 形參類型, 形參 形參類型) 返回值類型 {函數體return 返回值 }2.基礎函數類型 無參數無返回…

vue中數組出現__ob__: Observer屬性,導致不能正確使用問題解決

直接上圖&#xff0c;如下圖&#xff0c;數組中出現__ob__: Observer屬性&#xff0c;導致無法取值。 解決方案為&#xff1a;JSON.parse(JSON.stringify(數組變量名))深拷貝數組&#xff0c;重新生成一個可枚舉數組。 // 處理代碼如let tempIds JSON.parse(JSON.stringify(i…

一文帶你初探FreeRTOS信號量

本文記錄我初步學習FreeRTOS的信號量的知識&#xff0c;在此記錄分享&#xff0c;希望我的分享對你有所幫助&#xff01; 什么是信號量 在FreeRTOS中&#xff0c;信號量&#xff08;Semaphore&#xff09;是一種用于任務間同步和資源共享的機制。信號量主要用于管理對共享資源的…

Cgi上傳文件 注意事項

//核心代碼 ofstream outfile("/opt/software/" file.getFilename(), ios::out | ios::binary); outfile << file.getData(); //錯誤方式&#xff1a;outfile << file.getData() <<endl; outfile.close(); 參考博客&#xff1a; https://blog.cs…

GNU/Linux - 各種包管理器介紹

Linux 包管理器根據不同的發行版和包管理系統有所不同。以下是一些常見的 Linux 包管理器&#xff1a; 1. RPM (Red Hat Package Manager) * 用于&#xff1a; Red Hat Enterprise Linux (RHEL), Fedora, CentOS, openSUSE * 包管理器&#xff1a; rpm, yum, dnf 2. DEB (Deb…

HTML如何在圖片上添加文字

HTML如何在圖片上添加文字 當我們開發一個頁面&#xff0c;插入圖片時&#xff0c;需要有一組文字對圖片進行描述。那么HTML中如何在圖片上添加文字呢&#xff1f;這篇文章告訴你。 先讓我們來看下效果圖&#xff1a; 句子“這是一張夜空圖片”被放置在了圖片的左下角。 那么…