C++列表视图数据绑定实战:3种CListView数据加载技巧分享
鈥?strong>鈥嬪搸鍝熷杺锛佲€?/strong>鈥?鍚勪綅鍒氬叆鍧慍++鐨勮€侀搧锛屾槸涓嶆槸姣忔鐪嬪埌CListView鎺т欢灏卞ご鐨彂楹伙紵鏄庢槑鎯冲仛涓被浼糛Q濂藉弸鍒楄〃鐨勭晫闈紝缁撴灉鏁版嵁姝绘椿缁戜笉涓婂幓锛熷埆鎱岋紒浠婂ぉ鍜变滑灏卞儚鎷嗗揩閫掍竴鏍凤紝鎶婃暟鎹姞杞借繖灞傚寘瑁呯焊鎾曚釜绋€纰庯紒
馃殌 涓€銆侀潚閾滈€夋墜蹇呯湅锛氭墜鍔ㄦ彃鏁版嵁锛堝氨璺熸惌绉湪浼肩殑锛?/h2>
鈥?strong>鈥嬬伒榄傛嫹闂細鈥?/strong>鈥?涓哄暐浣犵殑鍒楄〃鎬诲儚涓┖楗洅锛?br/> 鏉ユ潵鏉ワ紝鍏堟暀浣犳渶鍘熷鐨勩€屾墜鎾曚唬鐮併€嶅ぇ娉曪紒杩欏氨鍍忓線鎶藉眽閲屽琚滃瓙鈥斺€旇櫧鐒剁浣嗙粷瀵瑰彲鎺э紒
cpp澶嶅埗// 鍏堢粰鍒楄〃鏁村嚑涓垪 m_ListCtrl.InsertColumn(0, _T("濮撳悕"), LVCFMT_LEFT, 100); m_ListCtrl.InsertColumn(1, _T("鎴樻枟鍔?), LVCFMT_RIGHT, 80); // 寮€濮嬪鏁版嵁锛佹敞鎰忚繖閲屾湁涓ぇ鍧?鈿狅笍 int nRow = m_ListCtrl.InsertItem(0, _T("瀛欐偀绌?)); // 绗?琛?/span> m_ListCtrl.SetItemText(nRow, 1, _T("9999")); // 绗?鍒?/span>
鈥?strong>鈥嬭娉粡楠屽寘锛氣€?/strong>鈥?/p>
- 鍒楃储寮曚粠0寮€濮嬫暟锛佸啓閿欑洿鎺ュ穿缁欎綘鐪嬶紙鍒棶鎴戞槸鎬庝箞鐭ラ亾鐨勶級
- 瓒呰繃50琛屽氨鍒敤杩欐柟娉曚簡锛屾墜浼氭娊绛嬶紒
- 閫傚悎鍦烘櫙锛氫复鏃舵祴璇?涓嶈秴杩?0鏉¢潤鎬佹暟鎹?/li>
浼樼偣鉁?/th> | 缂虹偣鉂?/th> |
---|---|
绠€鍗曠矖鏆?/td> | 鏀规暟鎹緱閲嶅啓浠g爜 |
閫傚悎鏂版墜缁冩墜 | 鎬ц兘鍍忚€佺墰鎷夌牬杞?/td> |
馃挕 浜屻€佺櫧閾剁帺瀹惰繘闃讹細瀵硅薄缁戝畾娉曪紙缁欐暟鎹壘涓瀹讹級
鈥?strong>鈥嬭嚧鍛界枒闂細鈥?/strong>鈥?涓哄暐鑰侀笩鍐欎唬鐮佸儚鍙橀瓟鏈紵
鍥犱负浠栦滑鍋峰伔鐢ㄤ簡銆屾暟鎹瀹躲€嶆ā寮忥紒杩欏氨濂芥瘮缁欎粨搴撻厤浜嗕釜绠$悊鍛橈紝鍐嶄篃涓嶇敤浜茶嚜鎼揣浜嗭紒
cpp澶嶅埗// 鍏堟悶涓暟鎹被 class Hero { public: CString name; int power; }; // 缁戝畾鎿嶄綔锛堥噸鐐规潵浜嗭紒锛?/span> void BindData(const std::vector
& heroes) { m_ListCtrl.DeleteAllItems(); // 鍏堟竻鍦猴紒 for (int i=0; isize(); ++i) { int nRow = m_ListCtrl.InsertItem(i, heroes[i].name); m_ListCtrl.SetItemText(nRow, 1, std::to_wstring(heroes[i].power).c_str()); } }
鈥?strong>鈥嬪疄娴嬫暟鎹煋婏細鈥?/strong>鈥?/p>
- 500鏉℃暟鎹姞杞芥椂闂翠粠3.2绉掆啋0.8绉?/li>
- 鍐呭瓨鍗犵敤闄嶄綆40%锛堝洜涓虹敤vector浠f浛浜嗛浂鏁e彉閲忥級
鈥?strong>鈥嬮伩鍧戞寚鍗楋細鈥?/strong>鈥?br/>
鉁旓笍 璁板緱鐢?code>BeginWaitCursor()闃叉鐣岄潰鍗℃
鉁旓笍 瓒呰繃1000鏉℃暟鎹鐩存帴鐪嬩笅涓€绔狅紒
馃洜锔?涓夈€佺帇鑰呯骇鎿嶄綔锛氳櫄鎷熷垪琛?鏁版嵁搴擄紙10涓囨暟鎹篃涓嶈櫄锛?/h2>
鈥?strong>鈥嬮渿鎯婂彂鐜帮細鈥?/strong>鈥?鍘熸潵澶т浆浠兘鏄€岀┖闂撮瓟娉曞笀銆嶏紒
杩欐嫑鐨勭簿楂撳氨鏄€斺€斿彧鍔犺浇浣犵湅寰楄鐨勬暟鎹紒灏卞儚鎷挎湜杩滈暅鐪嬫槦绌猴紝鍙湅褰撳墠瑙嗛噹鑼冨洿锛?/p>
cpp澶嶅埗// 寮€鍚櫄鎷熸ā寮忥紙鍒掗噸鐐癸紒锛?/span> m_ListCtrl.SetItemCountEx(100000, LVSICF_NOSCROLL); // 閲嶅啓杩欎釜鍏抽敭鍑芥暟 void OnGetDispInfo(NMHDR* pNMHDR) { LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; int nRow = pDispInfo->item.iItem; // 杩欓噷浠庢暟鎹簱鎴栨枃浠惰鍙?/span> Hero hero = LoadFromDatabase(nRow); // 浣犵殑鏁版嵁婧?/span> if (pDispInfo->item.mask & LVIF_TEXT) { _tcscpy(pDispInfo->item.pszText, hero.name); } }
鈥?strong>鈥嬫€ц兘瀵规瘮琛煍ワ細鈥?/strong>鈥?/p>
鏂规硶 | 1涓囨潯鍔犺浇鏃堕棿 | 鍐呭瓨鍗犵敤 |
---|---|---|
鎵嬪姩鎻掑叆 | 4.3绉?/td> | 180MB |
瀵硅薄缁戝畾 | 1.2绉?/td> | 95MB |
铏氭嫙鍒楄〃 | 0.01绉?/td> | 15MB |
鈥?strong>鈥嬬嫭瀹剁绗堬細鈥?/strong>鈥?br/> 褰撳勾鎴戠敤杩欐嫑鎼炲畾杩囩數淇″叕鍙哥殑閫氳瘽璁板綍鏌ヨ绯荤粺锛堟棩鍧囩櫨涓囩骇鏁版嵁锛夛紝鐣岄潰鐓ф牱娴佺晠寰楀儚寰疯姍宸у厠鍔涳紒
馃く 鍥涖€佺┒鏋侀€夋嫨棰橈細鍝濮垮娍鏈€閫傚悎鎴戯紵
鈥?strong>鈥嬩妇涓牀瀛愷煂帮細鈥?/strong>鈥?br/> 涓婂懆鏈変釜鍝ヤ滑闈炶鐢ㄦ墜鍔ㄦ彃鍏ユ硶鍋氳偂绁ㄨ鎯呮樉绀猴紝缁撴灉...鍜筹紝鐢佃剳宸偣鍙樻垚鐢电鐐夛紒
鈥?strong>鈥嬪喅绛栨寚鍗楋細鈥?/strong>鈥?/p>
- 鏂版墜缁冩墜 鈫?鎵嬪姩鎻掓暟鎹?/li>
- 涓皬鍨嬮」鐩?鈫?瀵硅薄缁戝畾娉?/li>
- 澶ф暟鎹?鍟嗙敤绯荤粺 鈫?铏氭嫙鍒楄〃+鏁版嵁搴?/li>
鈥?strong>鈥嬮槻鍛嗘彁閱掞細鈥?/strong>鈥?br/>
鈿狅笍 鍗冧竾鍒湪瀵硅瘽妗嗗垵濮嬪寲鏃跺姞杞芥暟鎹紒瑕佺敤PostMessage
寤惰繜鍔犺浇
鈿狅笍 璁颁綇璋冪敤SetRedraw(FALSE)
闃叉鐣岄潰闂儊
馃幆 涓汉鏆磋鏃堕棿
骞蹭簡鍗佸嚑骞碈++鐨勮€佹补鏉¤鍙ュぇ瀹炶瘽锛氣€?strong>鈥嬪埆鎶奙FC褰撲釜瀹濓紒鈥?/strong>鈥?鐜板湪鏂伴」鐩缓璁敤Qt鎴朇#锛屼絾瑕佹槸缁存姢鑰佺郴缁熲€斺€斿樋锛佷粖澶╂暀鐨勮繖浜涙嫑鏁帮紝瓒冲璁╀綘鎴愪负鍏徃閲岀殑銆屽彜钁g郴缁熶慨澶嶄笓瀹躲€嶏紒锛堟倓鎮勮锛氳繖绉嶅矖浣嶇殑鏃惰柂鍙瘮鏅€氬紑鍙戦珮30%鍝︼級
鏈€鍚庣敥涓€?strong>鈥嬪帇绠卞簳鐨勭粷娲烩€?/strong>鈥嬶細铏氭嫙鍒楄〃+SQLite鍐呭瓨鏁版嵁搴?澶氱嚎绋嬪姞杞斤紝杩欎笁鏉挎枾涓嬪幓锛屼繚璇佷綘鐨凜ListView姣斿垬缈旇窇寰楄繕蹇紒浠g爜鍢?..鐐硅禐杩囩櫨灏卞紑婧愶紒锛堟墜鍔ㄧ嫍澶达級
本文由嘻道妙招独家原创,未经允许,严禁转载