近日天氣寒冷,學習的熱情都快被這氣溫給打壓下去,早晨起不來,晚上又想早點躺在被窩裡面,這樣下去,感覺整個人如同鹹魚一般。無決心者,然小事可擾之,坐立不安,思前想後,時不待也,欲成事之,必靜之以練其心智,久而久之,不成難矣!
#ifndef booleanmodel_h
#define booleanmodel_h
#include "node.h"
#include class node;
class booleanmodel:public qabstractitemmodel
;#endif // booleanmodel_h
#ifndef booleamparser_h
#define booleamparser_h
#include "node.h"
class booleanparser
;#endif // booleanparser_h
#ifndef booleanwindow_h
#define booleanwindow_h
#include class qlabel;
class qlineedit;
class qtreeview;
class booleanmodel;
class booleanwindow:public qwidget
;#endif // booleanwindow_h
#ifndef node_h
#define node_h
#include #include //node類為樹的節點
class node
; node(type type,const qstring &str="");
~node();
type type;//型別是否為操作符
qstring str;//存資料
node *parent;//指向父節點
qlistchildren;//儲存node所有節點
};#endif // node_h
#include "booleanmodel.h"
booleanmodel::booleanmodel(qobject *parent):qabstractitemmodel(parent)
booleanmodel::~booleanmodel()
void booleanmodel::setrootnode(node *node)
//返回第row行,第column列,父節點為parent的元素qmodelindex物件
qmodelindex booleanmodel::index(int row, int column, const qmodelindex &parent) const
int booleanmodel::rowcount(const qmodelindex &parent) const
node *parentnode =nodefromindex(parent);
if(!parentnode)
return 0;
return parentnode->children.count();
}int booleanmodel::columncount(const qmodelindex &) const
//返回子節點所屬的父節點的索引
qmodelindex booleanmodel::parent(const qmodelindex &child)const
//返回單元格的顯示值
qvariant booleanmodel::data(const qmodelindex &index, int role) const
}else if(index.column()==1)
return qvariant();
}qvariant booleanmodel::headerdata(int section, qt::orientation orientation, int role) const
else if(section==1)
}return qvariant();
}node *booleanmodel::nodefromindex(const qmodelindex &index) const
else
}
#include "booleanparser.h"
node *booleanparser::parse(const qstring &expr)
//布林表示式not and or優先順序從高到低
//遞迴下降演算法
node *booleanparser::parseorexpression()
return node;
}else
}node *booleanparser::parseandexpression()
return node;
}else
}node *booleanparser::parsenotexpression()
else
}node *booleanparser::parseatom()
else
}node *booleanparser::parseidentifier()
else
}void booleanparser::addchild(node *parent, node *child)
}void booleanparser::addtoken(node *parent, const qstring &str, node::type type)
}bool booleanparser::matchtoken(const qstring &str) const
#include #include #include "booleanmodel.h"
#include "booleanparser.h"
#include "booleanwindow.h"
booleanwindow::booleanwindow()
void booleanwindow::booleanexpressionchanged(const qstring &expr)
int main(int argc, char *ar**)
#include "node.h"
node::node(type type,const qstring &str)
node::~node()
備註:qt錯誤undefined reference to vtable for **,解決辦法刪除debug下面的makefile檔案,我自己是將編譯後的檔案全部刪除後,重新編譯就可以了,原因是新增q_object巨集之後,沒有經過qt解析訊號與槽相關部分,導致編譯器編譯出錯。 布林表示式
布林表示式 boolean expression 是一段 宣告,它最終只有true 真 和false 假 兩個取值。從最基本的層次來說,所有的布林表示式,不論它的長短如何,其值只能是true或false。最簡單的布林表示式是等式 equality 這種布林表示式用來測試乙個值是否與另乙個值相同。它可...
翻譯布林表示式
翻譯布林表示式time limit 1000 ms memory limit 65536 kib problem description 大家都學過了布林表示式的翻譯,其中有乙個拉鍊 回填技術,這次我們就練習這個技術。input 多組輸入,每組輸入為一行字串,例如 a b or c d and e ...
翻譯布林表示式
time limit 1000 ms memory limit 65536 kib submit statistic problem description 大家都學過了布林表示式的翻譯,其中有乙個拉鍊 回填技術,這次我們就練習這個技術。input 多組輸入,首先輸入乙個整數t,代表資料組數。接下來...