📄 booleanmodel.cpp
字号:
#include <QtCore>#include "booleanmodel.h"#include "booleanparser.h"BooleanModel::BooleanModel(QObject *parent) : QAbstractItemModel(parent){ rootNode = 0;}BooleanModel::~BooleanModel(){ delete rootNode;}void BooleanModel::setRootNode(Node *node){ delete rootNode; rootNode = node; reset();}QModelIndex BooleanModel::index(int row, int column, const QModelIndex &parent) const{ if (!rootNode || row < 0 || column < 0) return QModelIndex(); Node *parentNode = nodeFromIndex(parent); Node *childNode = parentNode->children.value(row); if (!childNode) return QModelIndex(); return createIndex(row, column, childNode);}QModelIndex BooleanModel::parent(const QModelIndex &child) const{ Node *node = nodeFromIndex(child); if (!node) return QModelIndex(); Node *parentNode = node->parent; if (!parentNode) return QModelIndex(); Node *grandparentNode = parentNode->parent; if (!grandparentNode) return QModelIndex(); int row = grandparentNode->children.indexOf(parentNode); return createIndex(row, 0, parentNode);}int BooleanModel::rowCount(const QModelIndex &parent) const{ if (parent.column() > 0) return 0; Node *parentNode = nodeFromIndex(parent); if (!parentNode) return 0; return parentNode->children.count();}int BooleanModel::columnCount(const QModelIndex & /* parent */) const{ return 2;}QVariant BooleanModel::data(const QModelIndex &index, int role) const{ if (role != Qt::DisplayRole) return QVariant(); Node *node = nodeFromIndex(index); if (!node) return QVariant(); if (index.column() == 0) { switch (node->type) { case Node::Root: return tr("Root"); case Node::OrExpression: return tr("OR Expression"); case Node::AndExpression: return tr("AND Expression"); case Node::NotExpression: return tr("NOT Expression"); case Node::Atom: return tr("Atom"); case Node::Identifier: return tr("Identifier"); case Node::Operator: return tr("Operator"); case Node::Punctuator: return tr("Punctuator"); default: return tr("Unknown"); } } else if (index.column() == 1) { return node->str; } return QVariant();}QVariant BooleanModel::headerData(int section, Qt::Orientation orientation, int role) const{ if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { if (section == 0) { return tr("Node"); } else if (section == 1) { return tr("Value"); } } return QVariant();}Node *BooleanModel::nodeFromIndex(const QModelIndex &index) const{ if (index.isValid()) { return static_cast<Node *>(index.internalPointer()); } else { return rootNode; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -