亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cell.cpp

?? C++ GUI Programming with Qt 4一書中的chap03源碼
?? CPP
字號:
#include <QtGui>

#include "cell.h"

Cell::Cell()
{
    setDirty();
}

QTableWidgetItem *Cell::clone() const
{
    return new Cell(*this);
}

void Cell::setData(int role, const QVariant &value)
{
    QTableWidgetItem::setData(role, value);
    if (role == Qt::EditRole)
        setDirty();
}

QVariant Cell::data(int role) const
{
    if (role == Qt::DisplayRole) {
        if (value().isValid()) {
            return value().toString();
        } else {
            return "####";
        }
    } else if (role == Qt::TextAlignmentRole) {
        if (value().type() == QVariant::String) {
            return int(Qt::AlignLeft | Qt::AlignVCenter);
        } else {
            return int(Qt::AlignRight | Qt::AlignVCenter);
        }
    } else {
        return QTableWidgetItem::data(role);
    }
}

void Cell::setFormula(const QString &formula)
{
    setData(Qt::EditRole, formula);
}

QString Cell::formula() const
{
    return data(Qt::EditRole).toString();
}

void Cell::setDirty()
{
    cacheIsDirty = true;
}

const QVariant Invalid;

QVariant Cell::value() const
{
    if (cacheIsDirty) {
        cacheIsDirty = false;

        QString formulaStr = formula();
        if (formulaStr.startsWith('\'')) {
            cachedValue = formulaStr.mid(1);
        } else if (formulaStr.startsWith('=')) {
            cachedValue = Invalid;
            QString expr = formulaStr.mid(1);
            expr.replace(" ", "");
            expr.append(QChar::Null);

            int pos = 0;
            cachedValue = evalExpression(expr, pos);
            if (expr[pos] != QChar::Null)
                cachedValue = Invalid;
        } else {
            bool ok;
            double d = formulaStr.toDouble(&ok);
            if (ok) {
                cachedValue = d;
            } else {
                cachedValue = formulaStr;
            }
        }
    }
    return cachedValue;
}

QVariant Cell::evalExpression(const QString &str, int &pos) const
{
    QVariant result = evalTerm(str, pos);
    while (str[pos] != QChar::Null) {
        QChar op = str[pos];
        if (op != '+' && op != '-')
            return result;
        ++pos;

        QVariant term = evalTerm(str, pos);
        if (result.type() == QVariant::Double
                && term.type() == QVariant::Double) {
            if (op == '+') {
                result = result.toDouble() + term.toDouble();
            } else {
                result = result.toDouble() - term.toDouble();
            }
        } else {
            result = Invalid;
        }
    }
    return result;
}

QVariant Cell::evalTerm(const QString &str, int &pos) const
{
    QVariant result = evalFactor(str, pos);
    while (str[pos] != QChar::Null) {
        QChar op = str[pos];
        if (op != '*' && op != '/')
            return result;
        ++pos;

        QVariant factor = evalFactor(str, pos);
        if (result.type() == QVariant::Double
                && factor.type() == QVariant::Double) {
            if (op == '*') {
                result = result.toDouble() * factor.toDouble();
            } else {
                if (factor.toDouble() == 0.0) {
                    result = Invalid;
                } else {
                    result = result.toDouble() / factor.toDouble();
                }
            }
        } else {
            result = Invalid;
        }
    }
    return result;
}

QVariant Cell::evalFactor(const QString &str, int &pos) const
{
    QVariant result;
    bool negative = false;

    if (str[pos] == '-') {
        negative = true;
        ++pos;
    }

    if (str[pos] == '(') {
        ++pos;
        result = evalExpression(str, pos);
        if (str[pos] != ')')
            result = Invalid;
        ++pos;
    } else {
        QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
        QString token;

        while (str[pos].isLetterOrNumber() || str[pos] == '.') {
            token += str[pos];
            ++pos;
        }

        if (regExp.exactMatch(token)) {
            int column = token[0].toUpper().unicode() - 'A';
            int row = token.mid(1).toInt() - 1;

            Cell *c = static_cast<Cell *>(
                              tableWidget()->item(row, column));
            if (c) {
                result = c->value();
            } else {
                result = 0.0;
            }
        } else {
            bool ok;
            result = token.toDouble(&ok);
            if (!ok)
                result = Invalid;
        }
    }

    if (negative) {
        if (result.type() == QVariant::Double) {
            result = -result.toDouble();
        } else {
            result = Invalid;
        }
    }
    return result;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级高清大全免费观看| 视频精品一区二区| 福利一区二区在线| 国产欧美日韩另类一区| 菠萝蜜视频在线观看一区| 国产精品美女www爽爽爽| av资源站一区| 亚洲成人黄色影院| 精品国产免费人成在线观看| 国产经典欧美精品| 亚洲人成影院在线观看| 欧美日韩一二三区| 免费成人小视频| 中国色在线观看另类| 色网站国产精品| 日本不卡一二三区黄网| 国产视频911| 91成人国产精品| 美女视频第一区二区三区免费观看网站| 久久新电视剧免费观看| 99久久99久久精品免费看蜜桃| 亚洲成人1区2区| 91美女福利视频| 国产日韩欧美在线一区| 色哟哟国产精品免费观看| 午夜成人免费视频| 久久久99精品久久| 欧美色精品在线视频| 国产在线精品一区二区夜色| 精品福利一二区| 国产欧美日产一区| 欧美色图激情小说| 成人永久免费视频| 日韩—二三区免费观看av| 国产精品视频一二三区| 欧美丰满少妇xxxbbb| 不卡的av中国片| 美国欧美日韩国产在线播放| 亚洲精品一二三区| 久久久久国产精品厨房| 欧美巨大另类极品videosbest| 国产成人日日夜夜| 美女视频黄免费的久久| 亚洲欧美日韩电影| 久久久久久久综合色一本| 欧美伊人久久大香线蕉综合69| 国产美女精品在线| 日韩和欧美一区二区| 亚洲男人天堂av网| 国产婷婷色一区二区三区| 欧美一级精品在线| 欧美日韩一区 二区 三区 久久精品| 成人丝袜高跟foot| 韩国成人福利片在线播放| 五月天欧美精品| 一区二区理论电影在线观看| 国产免费久久精品| 久久婷婷国产综合精品青草| 日韩小视频在线观看专区| 欧美性猛片aaaaaaa做受| 91丝袜国产在线播放| 国产不卡在线播放| 国产原创一区二区| 免费不卡在线视频| 久久久久99精品国产片| 不卡一卡二卡三乱码免费网站| 国产一区二区毛片| 韩国av一区二区三区| 久久99热这里只有精品| 图片区小说区区亚洲影院| 亚洲国产日韩一级| 亚洲一区二区不卡免费| 夜色激情一区二区| 亚洲精品国产品国语在线app| 亚洲欧洲日韩综合一区二区| 亚洲国产经典视频| 国产精品日日摸夜夜摸av| 国产女人水真多18毛片18精品视频 | 爽爽淫人综合网网站| 色欲综合视频天天天| 精品一区二区三区日韩| 午夜国产精品一区| 视频在线观看一区二区三区| 日韩一区二区视频| 欧美日韩欧美一区二区| 国产成人久久精品77777最新版本| 亚洲成人一二三| 亚洲在线成人精品| 成人午夜激情片| 日韩欧美国产一二三区| 亚洲福利一二三区| 青青草97国产精品免费观看 | 69av一区二区三区| 欧美一区在线视频| 韩国v欧美v亚洲v日本v| 日韩av二区在线播放| 精品亚洲成a人在线观看| 黄页视频在线91| 成人av网址在线| 在线观看一区二区视频| 欧美美女直播网站| 久久久久久久久久美女| 中文字幕中文乱码欧美一区二区| 一区二区三区在线视频免费观看| 亚洲一区二三区| 久久国产精品色| 91视频观看免费| 91精品国产综合久久久久久久久久 | 日韩不卡一二三区| 国产精品原创巨作av| 精品污污网站免费看| 91精品国产91久久综合桃花| 久久久久国产精品麻豆ai换脸| 1024成人网| 蜜桃av一区二区在线观看| 成人的网站免费观看| 91超碰这里只有精品国产| 久久一留热品黄| 亚洲精品免费播放| 日本不卡免费在线视频| 99国产麻豆精品| 欧美一级高清大全免费观看| 国产精品高潮久久久久无| 美女高潮久久久| 在线观看91精品国产入口| 久久美女艺术照精彩视频福利播放| 亚洲欧美另类久久久精品2019 | 五月婷婷综合网| 国产91精品精华液一区二区三区 | 色综合天天视频在线观看| 成人网页在线观看| 韩国女主播成人在线观看| 色综合欧美在线视频区| 精品日韩欧美一区二区| 一区二区在线看| 成人久久视频在线观看| 欧美一区二区视频网站| 亚洲品质自拍视频| 国产一区二区三区最好精华液| 欧美日韩一区二区在线观看| 国产日韩一级二级三级| 美女视频一区二区| 欧美日本在线一区| 中文字幕一区二区三区乱码在线| 久久国内精品视频| 欧美午夜电影在线播放| 中文字幕在线观看一区| 国产成人综合精品三级| 欧美xxxxxxxxx| 日韩电影在线一区二区三区| 在线国产亚洲欧美| 亚洲日本青草视频在线怡红院| 国产精品996| 精品久久久久久久久久久久久久久| 视频一区二区中文字幕| 欧美另类久久久品| 亚洲第一搞黄网站| 91久久精品一区二区| 一区二区三区四区在线播放 | 国产资源在线一区| 午夜成人免费视频| 亚洲精品免费播放| 国产精品资源在线| 亚洲精品在线一区二区| 男人操女人的视频在线观看欧美 | 亚洲一区二区在线免费观看视频| 成人黄色av电影| 国产精品女人毛片| 亚洲国产精品t66y| 亚洲影视在线观看| 欧美麻豆精品久久久久久| 亚洲一区二区三区中文字幕在线| 色婷婷狠狠综合| 亚洲香肠在线观看| 欧美另类高清zo欧美| 看国产成人h片视频| 久久久一区二区三区| 国产精品888| 国产精品美女久久福利网站 | 国产电影精品久久禁18| 日本一区二区三区免费乱视频| 成人午夜视频免费看| 亚洲婷婷在线视频| 欧美在线观看18| 日本不卡一区二区| 久久综合久久综合九色| 成人教育av在线| 一区二区三区四区蜜桃| 在线不卡中文字幕| 激情综合网av| 中文字幕在线不卡国产视频| 日本韩国欧美三级| 久久国产人妖系列| 国产精品传媒在线| 欧美综合一区二区| 麻豆高清免费国产一区| 国产精品视频麻豆| 欧美午夜宅男影院| 国产精品影视天天线| 亚洲精品免费在线播放|