📄 regexpmodel.cpp
字号:
#include <QtCore>#include "regexpmodel.h"#include "regexpparser.h"RegExpModel::RegExpModel(QObject *parent) : QAbstractItemModel(parent){ rootNode = 0;}RegExpModel::~RegExpModel(){ delete rootNode;}void RegExpModel::setRootNode(Node *node){ delete rootNode; rootNode = node; reset();}QModelIndex RegExpModel::index(int row, int column, const QModelIndex &parent) const{ if (!rootNode) return QModelIndex(); Node *parentNode = nodeFromIndex(parent); return createIndex(row, column, parentNode->children[row]);}QModelIndex RegExpModel::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, child.column(), parentNode);}int RegExpModel::rowCount(const QModelIndex &parent) const{ Node *parentNode = nodeFromIndex(parent); if (!parentNode) return 0; return parentNode->children.count();}int RegExpModel::columnCount(const QModelIndex & /* parent */) const{ return 2;}QVariant RegExpModel::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::RegExp: return tr("RegExp"); case Node::Expression: return tr("Expression"); case Node::Term: return tr("Term"); case Node::Factor: return tr("Factor"); case Node::Atom: return tr("Atom"); case Node::Terminal: return tr("Terminal"); default: return tr("Unknown"); } } else if (index.column() == 1) { return node->str; } return QVariant();}QVariant RegExpModel::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 *RegExpModel::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 + -