免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2134 | 回复: 0
打印 上一主题 下一主题

Qt学习之路(47): 自定义Model之三 [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-22 10:15 |只看该作者 |倒序浏览
  今天来说的是自定义model中最复杂的例子。这个例子同样也是出自C++ GUI Programming with Qt 4, 2nd Edition这本书。
  这个例子是将布尔表达式分析成一棵树。这个分析过程在离散数学中经常遇到,特别是复杂的布尔表达式,类似的分析可以比较方便的进行表达式化简、求值等一系列的计算。同样,这个技术也可以很方便的分析一个表达式是不是一个正确的布尔表达式。在这个例子中,一共有四个类:
  Node:组成树的节点;
  BooleaModel:布尔表达式的model,实际上是一个tree model,用于将布尔表达式表示成一棵树;
  BooleanParser:将布尔表达式生成分析树的分析器;
  BooleanWindow:输入布尔表达式并进行分析,展现成一棵树。
  这个例子可能是目前为止最复杂的一个了,所以先来看看最终的结果,以便让我们心中有数:

  先来看这张图片,我们输入的布尔表达式是!(a||b)&&c||d, 在下面的Node栏中,用树的形式将这个表达式分析了出来。如果你熟悉编译原理,这个过程很像词法分析的过程:将一个语句分析称一个一个独立的词素。
  我们从最底层的Node类开始看起,一步步构造这个程序。
  Node.h
class Node
{
public:
        enum Type
        {
                Root,
                OrExpression,
                AndExpression,
                NotExpression,
                Atom,
                Identifier,
                Operator,
                Punctuator
        };
        Node(Type type, const QString &str = "");
        ~Node();
        Type type;
        QString str;
        Node *parent;
        QList children;
};
          
                       
                               
编缉推荐阅读以下文章
                               

              
                         
  • Qt学习之路(46): 自定义model之二
                        
                         
  • Qt学习之路(45): 自定义model之一
                        
                         
  • Qt学习之路(44): QSortFilterProxyModel
                        
                         
  • Qt学习之路(43): QDirModel
                        
                         
  • Qt学习之路(42): QStringListModel
                        
                         
  • Qt学习之路(41): QTableWidget
                        
                         
  • Qt学习之路(40): QTreeWidget
                        
                         
  • Qt学习之路(39): QListWidget
                        
                         
  • Qt学习之路(38): model-view架构
                        
                         
  • Qt学习之路(37): Qt容器类之关联存储容器
                        
                                   

                       
                       
         
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP