⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 booleanmodel.cpp

📁 QT4 gui programming的随书光盘
💻 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 + -