zoukankan      html  css  js  c++  java
  • QTreeWidget的一个例子,C++语法和item迭代循环都比较巧妙

    学习一下,据说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++",          "19",   ""},  
        {"Chapter 2",     "C with Classes",                 "27",   ""},  
    
        {"Section 1.1",   "Simula and Distributed Systems", "19",   "Chapter 1"},  
        {"Section 1.2",   "C and Systems Programming",      "22",   "Chapter 1"},  
    
        {"Section 2.4",   "Run-Time Efficiency",                "32",   "Chapter 2"},  
        {"Section 2.4.1", "Inlining",                       "33",   "Section 2.4"},  
    };  
    
    int main(int argc, char *argv[])  
    {  
        QApplication app(argc, argv);  
        QTreeWidget * treeWidget = new QTreeWidget();  
        // 设置列数(赤裸裸简单规定多少列的情况不多见啊)
        treeWidget->setColumnCount(3); 
        // 设置表头
        QStringList headers;  
        headers << "Section Number" << "Title" << "Page Number";  
        treeWidget->setHeaderLabels(headers);                       
    
        // 循环一共执行六次
        for (int i=0; i<sizeof(directory)/sizeof(directory[0]);  i++) {  
            SectionInfo info = directory[i]; // 给C++结构体赋值,还挺巧妙的 
            QTreeWidgetItem * item=NULL;  
            if (strcmp(info.parent_id, "")==0 ){  
                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(0) != parent_id) { // text(0)是QTreeWidgetItem的函数,即第零列的文字
                    qDebug() << i << "  " << (*it)->text(0);
                    ++it;  
                }
                item = new QTreeWidgetItem( *it ); // 把最后一行空迭代子项变成一行,并把找到的节点设为父节点 good 
            }  
            // 有了item及可以设置内容了
            if ( item) {  
                item->setText(0, info.sect_id);  
                item->setText(1, info.title  );  
                item->setText(2, info.page_num);  
            }  
        }     
        treeWidget->resize(400,200);  
        treeWidget->show();  
        return app.exec();  
    }  

    参考:

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

  • 相关阅读:
    JSP基础(一)JSP介绍,文件结构及执行过程
    使用MyEclipse开发第一个Web程序
    Activity启动模式 Tasks和Back Stack
    XML的DOM解析 Java实现 例子二
    XML 命名空间(Namespace)
    HTTP基础:URL格式、 HTTP请求、响应、消息
    Android Log相关
    Tomcat环境配置
    XML DOM解析(Java)的一个简单实例
    JSP基础(三)JSP内置对象 利用application对象做一个简单的网页计数器
  • 原文地址:https://www.cnblogs.com/findumars/p/4060175.html
Copyright © 2011-2022 走看看