<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>class treenode;<br /> </li><li><br /></li><li>typedef treenode* treenodeptr;<br /></li><li><br /></li><li>class treenode<br /></li><li>{<br /></li><li>public:<br /></li><li>explicit treenode();<br /></li><li>treenodeptr parent() const;<br /></li><li>void setparent(const treenodeptr p); //设置父节点,根节点的父节点为null<br /></li><li>void appendnode(treenodeptr node);<br /></li><li>void removenode(int row);<br /></li><li>void setdata(int role,qvariant value); </li><li>qlist<treenodeptr>childs; //用于保存子节点指针,把childs放到public不好,仅仅是为了方便,不要学。<br /></li><li><br /></li><li>private:<br /></li><li>treenodeptr mparent=null; //父节点<br /></li><li>qhash<int,qvariant>mrecord; //一个节点可以保存一行数据,哈希表的key是整型,用于保存role,qvariant保存数据<br /></li><li><br /></li><li>}; </li></ol><ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>treenodeptr treenode::parent() const<br /> </li><li>{<br /></li><li>return mparent;<br /></li><li>}<br /></li><li><br /></li><li>void treenode::setparent(const treenodeptr p)<br /></li><li>{<br /></li><li>this->mparent = p;<br /></li><li>}<br /></li><li><br /></li><li>void treenode::appendnode(treenodeptr node)<br /></li><li>{<br /></li><li>childs.append(node);<br /></li><li>}<br /></li><li><br /></li><li>void treenode::removenode(int row)<br /></li><li>{<br /></li><li>childs.removeat(row);<br /></li><li>}<br /></li><li><br /></li><li><br /></li><li>qvariant treenode::data(int role)<br /></li><li>{<br /></li><li>return mrecord[role];<br /></li><li>}<br /></li><li><br /></li><li>void treenode::setdata(int role, qvariant value)<br /></li><li>{<br /></li><li>mrecord[role] = value;<br /></li><li>} </li></ol><ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>class sqlmenuentry:public qabstractitemmodel,public qqmlparserstatus<br /> </li><li>{<br /></li><li>q_object<br /></li><li>public:<br /></li><li>explicit sqlmenuentry(qobject *parent=0);<br /></li><li>~sqlmenuentry();<br /></li><li>enum menuentryroles{idrole=qt::userrole+1,namerole,defaultentryrole,customentryrole,iconrole,iconhoverrole};<br /></li><li>int rowcount(const qmodelindex &parent=qmodelindex()) const;<br /></li><li>int columncount(const qmodelindex &parent=qmodelindex()) const;<br /></li><li>qmodelindex index(int row, int column, const qmodelindex &parent=qmodelindex()) const;<br /></li><li>qvariant data(const qmodelindex &index, int role=qt::displayrole) const;<br /></li><li>qmodelindex parent(const qmodelindex &child) const;<br /></li><li>qhash<int,qbytearray>rolenames() const;<br /></li><li>private:<br /></li><li>qhash<int,qbytearray> mrolenames;<br /></li><li> <s>qlist</s><s><</s><s>qhash</s><s><</s><s>int</s><s>,</s><s>qvariant</s><s>></s><s>></s><s> mrecords</s><s>;</s> //qlist不能保存树状数据,干掉<br /></li><li> qlist mrootentrys; //用于保存根节点 </li><li> void _addentrynode(treenodeptr node,treenodeptr parent=0); //用于向树添加节点 </li><li>}; </li></ol><ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>void sqlmenuentry::_addentrynode(treenodeptr node, treenodeptr parent)<br /> </li><li>{<br /></li><li>if(parent == null)<br /></li><li>{<br /></li><li>mrootentrys.append(node);<br /></li><li>}else{<br /></li><li>node->setparent(parent);<br /></li><li>parent->appendnode(node);<br /></li><li>}<br /></li><li>} </li><li><br /> </li></ol><ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>beginresetmodel();<br /> </li><li><br /></li><li>auto node = new treenode(); </li><li>node->setdata(namerole,"parent 1");<br /></li><li>node->setdata(iconrole,"parenticon1"); </li><li>_addentrynode(node); //添加第一个根节点<br /></li><li> </li><li> auto subnode = new treenode(); </li><li> subnode->setdata(namerole,"child1");<br /></li><li> _addentrynode(subnode,node); //添加子节点 </li><li><br /> </li><li>endresetmodel(); </li></ol>
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>int sqlmenuentry::rowcount(const qmodelindex &parent) const<br /> </li><li>{<br /></li><li>if(parent.isvalid()) //parent不为空,则要获取的行数是某个节点的子节点行数<br /></li><li>{<br /></li><li>treenodeptr parentnode = (treenodeptr)parent.internalpointer(); //节点信息在index时被保存在qmodelindex的internalpointer中<br /></li><li>return parentnode->childs.size();<br /></li><li>} </li><li>return mrootentrys.size(); //否则返回的是根节点行数<br /></li><li><br /></li><li>} </li></ol><ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>qmodelindex sqlmenuentry::index(int row, int column, const qmodelindex &parent) const<br /> </li><li>{<br /></li><li>if(!parent.isvalid()) //parent为空,返回的是根节点的modelindex,返回的同时,把节点数据指针(treenodeptr)保存在qmodelindex的internalpointer中,以便在其它函数中获取节点数据<br /></li><li>{<br /></li><li>if((row >= 0) && (row < mrootentrys.size()))<br /></li><li>{<br /></li><li>return createindex(row,column,mrootentrys.at(row)); <br /></li><li>}<br /></li><li>}else{<br /></li><li>treenodeptr parentnode = (treenodeptr)parent.internalpointer(); //返回子节点的modelindex<br /></li><li>return createindex(row,column,parentnode->childs[row]);<br /></li><li>}<br /></li><li>return qmodelindex();<br /></li><li>} </li></ol><ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>qmodelindex sqlmenuentry::parent(const qmodelindex &child) const<br /> </li><li>{<br /></li><li>treenodeptr node = (treenodeptr)child.internalpointer();<br /></li><li>if(node->parent() == null)<br /></li><li>{<br /></li><li>return qmodelindex(); //根节点没有parent<br /></li><li>}else{<br /></li><li>return createindex(0,1,node->parent());<br /></li><li>} </li></ol><ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>qvariant sqlmenuentry::data(const qmodelindex &index, int role) const<br /> </li><li>{<br /></li><li>treenodeptr node = (treenodeptr)index.internalpointer();<br /></li><li>return node->data(role);<br /></li><li>} </li></ol><ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>treeview{<br /> </li><li>anchors.fill: parent<br /></li><li>tableviewcolumn {<br /></li><li>title: "name"<br /></li><li>role: "name"<br /></li><li>}<br /></li><li><br /></li><li>tableviewcolumn {<br /></li><li>title: "entry"<br /></li><li>role: "icon"<br /></li><li>}<br /></li><li>model:menuentrymodel{}<br /></li><li>} </li></ol>
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号