学习一下,据说QTreeWidget简单好用,不需要单独设置Model和View,更没有delegate。Signal和Slot应该可以正常使用(未验证,以后补充)。

#include <QtGui/QApplication>
#include <QTreeWidget>
#include <QDebug> // 定义结构体,只包括四个指针
typedef struct {
char * sect_id, * title, * page_num;
char * parent_id;
} SectionInfo; // 注意1,靠内容(最后一项)来设置上下级关系
// 注意2,它们不是按顺序排列的
SectionInfo directory[] = {
{"Chapter 1", "The Prehistory of C++", "", ""},
{"Chapter 2", "C with Classes", "", ""}, {"Section 1.1", "Simula and Distributed Systems", "", "Chapter 1"},
{"Section 1.2", "C and Systems Programming", "", "Chapter 1"}, {"Section 2.4", "Run-Time Efficiency", "", "Chapter 2"},
{"Section 2.4.1", "Inlining", "", "Section 2.4"},
}; int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTreeWidget * treeWidget = new QTreeWidget();
// 设置列数(赤裸裸简单规定多少列的情况不多见啊)
treeWidget->setColumnCount();
// 设置表头
QStringList headers;
headers << "Section Number" << "Title" << "Page Number";
treeWidget->setHeaderLabels(headers); // 循环一共执行六次
for (int i=; i<sizeof(directory)/sizeof(directory[]); i++) {
SectionInfo info = directory[i]; // 给C++结构体赋值,还挺巧妙的
QTreeWidgetItem * item=NULL;
if (strcmp(info.parent_id, "")== ){
item = new QTreeWidgetItem(treeWidget); // 设置一行依附于整体
}else{
QString parent_id(info.parent_id); // 取得当前行父节点的文字,用于比较
QTreeWidgetItemIterator it (treeWidget); // 取得整体treeWidget的迭代子项,注意是一行一行迭代
// 直到i=4,才会进入while循环,0和1不会进入else,2和3第一次比较就不成立,所以不会进入while
while ( (*it)->text() != parent_id) { // text(0)是QTreeWidgetItem的函数,即第零列的文字
qDebug() << i << " " << (*it)->text();
++it;
}
item = new QTreeWidgetItem( *it ); // 把最后一行空迭代子项变成一行,并把找到的节点设为父节点 good
}
// 有了item及可以设置内容了
if ( item) {
item->setText(, info.sect_id);
item->setText(, info.title );
item->setText(, info.page_num);
}
}
treeWidget->resize(,);
treeWidget->show();
return app.exec();
}

参考:

http://book.51cto.com/art/201207/347905.htm

QTreeWidget的一个例子,C++语法和item迭代循环都比较巧妙的更多相关文章

  1. Python爬虫 XPath语法和lxml模块

    XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...

  2. [golang] go的typeswitch guard(类型区别)语法和type assertion(类型断言)语法

    最近在实现golang,看到个go的特性语法: typeswitch guard. typeswitch guard语法如下: package main import "fmt" ...

  3. laravel基础课程---9、视图(lavarel的模板语法和tp相比怎样)

    laravel基础课程---9.视图(lavarel的模板语法和tp相比怎样) 一.总结 一句话总结: lavarel的模板语法比thinkphp好用很多:和html代码配合的更好 lavarel比t ...

  4. ToText Basic 语法和 Crystal 语法

    本文转自http://www.softwelt.com/Know/KnowDetail-2236860.html ToText 和 CStr 是等价函数. 重载 ToText (x) ToText ( ...

  5. Go汇编语法和MatrixOne使用介绍

    目录 MatrixOne数据库是什么? Go汇编介绍 为什么使用Go汇编? 为什么不用CGO? Go汇编语法特点 操作数顺序 寄存器宽度标识 函数调用约定 对写Go汇编代码有帮助的工具 avo tex ...

  6. XPath语法和lxml模块

    XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...

  7. OC第五节 ——点语法和@property

    一.setter和getter函数     1.回忆:如何访问对象中的成员变量    2.setter和getter函数的作用            setter  方法:   修改对象的字段/实例变 ...

  8. Markdown 语法和 MWeb 写作使用说明

    ---恢复内容开始--- # Markdown 语法和 MWeb 写作使用说明 Markdown 的设计哲学 Markdown 的目標是實現「易讀易寫」. 不過最需要強調的便是它的可讀性.一份使用 M ...

  9. 对Jena的简单理解和一个例子

    本文简单介绍Jena(Jena 2.4),使用Protégé 3.1(不是最新版本)创建一个简单的生物(Creature)本体,然后参照Jena文档中的一个例子对本体进行简单的处理,输出本体中的Cla ...

随机推荐

  1. Github for Windows使用图文教程

    原文:http://www.cr173.com/html/15618_1.html Git已经变得非常流行,连Codeplex现在也已经主推Git.Github上更是充斥着各种高质量的开源项目,比如r ...

  2. javascript面向对象分层思维

    js本身不是面向对象语言,在我们实际开发中其实很少用到面向对象思想,以前一直以为当要复用的时候才封装成对象,然而随着现在做的项目都后期测试阶段发现面向对象的作用不仅仅只是复用,可能你们会说面向对象还有 ...

  3. 谈谈 Repository、IUnitOfWork 和 IDbContext 的实践

    谈谈 Repository.IUnitOfWork 和 IDbContext 的实践 上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext ...

  4. OC中成员变量的命名

    先前写C++ 的时候,命名成员变量一般都是用 m_veriableName:的方式,但是进到新项目组,用了OC以后,发现成员变量都是用 veriableName_的方式,最后的一个下划线表示是成员变量 ...

  5. c++函数内部声明函数,在函数外面实现函数是可以的

    这个具体有什么用我也不大清楚,只知道可以这样 #include <iostream> //#include "header1.h" using namespace st ...

  6. Notes of the scrum meeting(11/2)

    meeting time:13:00~13:30p.m.,November 2nd,2013 meeting place:3号公寓楼一层 attendees: 顾育豪                  ...

  7. Liferay JSP中常用的标签

    (本文转载自http://www.cnblogs.com/edwardlauxh/archive/2010/03/26/1918614.html) 在Liferay框架中拥有它自身的标签,虽然Port ...

  8. nginx简单反向代理和负载均衡(ubuntu)

    nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机    均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...

  9. 【工具】openwrt安装记录

    步骤: 1  从以太网引导启动.由于我们实验室在服务器上放了一个openwrt镜像,安装时先从以太网启动,将服务器上的镜像载入到RAM中启动系统. 2  用SCP将在PC上编译好的openwrt-XX ...

  10. Nginx问题总汇

    http://blog.csdn.net/llnara/article/details/8691049 关键字: open var run nginx pid failed 产生原因:添加模块,重编译 ...