5 QT布林表示式模型

2021-09-10 02:37:26 字數 3573 閱讀 3712

近日天氣寒冷,學習的熱情都快被這氣溫給打壓下去,早晨起不來,晚上又想早點躺在被窩裡面,這樣下去,感覺整個人如同鹹魚一般。無決心者,然小事可擾之,坐立不安,思前想後,時不待也,欲成事之,必靜之以練其心智,久而久之,不成難矣!

#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,代表資料組數。接下來...