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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? spreadsheet.cpp

?? 這個(gè)是qt3c++編程書(齊亮翻譯),里面3,4章代碼
?? CPP
字號:
#include <qapplication.h>#include <qclipboard.h>#include <qdatastream.h>#include <qfile.h>#include <qlineedit.h>#include <qmessagebox.h>#include <qregexp.h>#include <qvariant.h>#include <algorithm>#include <vector>using namespace std;#include "cell.h"#include "spreadsheet.h"Spreadsheet::Spreadsheet(QWidget *parent, const char *name)    : QTable(parent, name){    autoRecalc = true;    setSelectionMode(Single);    clear();}void Spreadsheet::clear(){    setNumRows(0);    setNumCols(0);    setNumRows(NumRows);    setNumCols(NumCols);    for (int i = 0; i < NumCols; i++)        horizontalHeader()->setLabel(i, QChar('A' + i));    setCurrentCell(0, 0);}Cell *Spreadsheet::cell(int row, int col) const{    return (Cell *)item(row, col);}QString Spreadsheet::formula(int row, int col) const{    Cell *c = cell(row, col);    if (c)        return c->formula();    else        return "";}void Spreadsheet::setFormula(int row, int col,                             const QString &formula){    Cell *c = cell(row, col);    if (c) {        c->setFormula(formula);        updateCell(row, col);    } else {        setItem(row, col, new Cell(this, formula));    }}QString Spreadsheet::currentLocation() const{    return QChar('A' + currentColumn())           + QString::number(currentRow() + 1);}QString Spreadsheet::currentFormula() const{    return formula(currentRow(), currentColumn());}QWidget *Spreadsheet::createEditor(int row, int col,                                   bool initFromCell) const{    QLineEdit *lineEdit = new QLineEdit(viewport());    lineEdit->setFrame(false);    if (initFromCell)        lineEdit->setText(formula(row, col));    return lineEdit;}void Spreadsheet::endEdit(int row, int col, bool accepted,                          bool wasReplacing){    QLineEdit *lineEdit = (QLineEdit *)cellWidget(row, col);    if (!lineEdit)        return;    QString oldFormula = formula(row, col);    QString newFormula = lineEdit->text();    QTable::endEdit(row, col, false, wasReplacing);    if (accepted && newFormula != oldFormula) {        setFormula(row, col, newFormula);        somethingChanged();    }}void Spreadsheet::somethingChanged(){    if (autoRecalc)        recalculate();    emit modified();}bool Spreadsheet::writeFile(const QString &fileName){    QFile file(fileName);    if (!file.open(IO_WriteOnly)) {        QMessageBox::warning(this, tr("Spreadsheet"),                             tr("Cannot write file %1:\n%2.")                             .arg(file.name())                             .arg(file.errorString()));        return false;    }    QDataStream out(&file);    out.setVersion(5);    out << (Q_UINT32)MagicNumber;    QApplication::setOverrideCursor(waitCursor);    for (int row = 0; row < NumRows; ++row) {        for (int col = 0; col < NumCols; ++col) {            QString str = formula(row, col);            if (!str.isEmpty())                out << (Q_UINT16)row << (Q_UINT16)col << str;        }    }    QApplication::restoreOverrideCursor();    return true;}bool Spreadsheet::readFile(const QString &fileName){    QFile file(fileName);    if (!file.open(IO_ReadOnly)) {        QMessageBox::warning(this, tr("Spreadsheet"),                             tr("Cannot read file %1:\n%2.")                             .arg(file.name())                             .arg(file.errorString()));        return false;    }    QDataStream in(&file);    in.setVersion(5);    Q_UINT32 magic;    in >> magic;    if (magic != MagicNumber) {        QMessageBox::warning(this, tr("Spreadsheet"),                             tr("The file is not a "                                "Spreadsheet file."));        return false;    }    clear();    Q_UINT16 row;    Q_UINT16 col;    QString str;    QApplication::setOverrideCursor(waitCursor);    while (!in.atEnd()) {        in >> row >> col >> str;        setFormula(row, col, str);    }    QApplication::restoreOverrideCursor();    return true;}void Spreadsheet::cut(){    copy();    del();}void Spreadsheet::copy(){    QTableSelection sel = selection();    QString str;    for (int i = 0; i < sel.numRows(); ++i) {        if (i > 0)            str += "\n";        for (int j = 0; j < sel.numCols(); ++j) {            if (j > 0)                str += "\t";            str += formula(sel.topRow() + i, sel.leftCol() + j);        }    }    QApplication::clipboard()->setText(str);}QTableSelection Spreadsheet::selection(){    if (QTable::selection(0).isEmpty())        return QTableSelection(currentRow(), currentColumn(),                               currentRow(), currentColumn());    return QTable::selection(0);}void Spreadsheet::paste(){    QTableSelection sel = selection();    QString str = QApplication::clipboard()->text();    QStringList rows = QStringList::split("\n", str, true);    int numRows = rows.size();    int numCols = rows.first().contains("\t") + 1;    if (sel.numRows() * sel.numCols() != 1        && (sel.numRows() != numRows            || sel.numCols() != numCols)) {        QMessageBox::information(this, tr("Spreadsheet"),                tr("The information cannot be pasted because the "                   "copy and paste areas aren't the same size."));        return;    }    for (int i = 0; i < numRows; ++i) {        QStringList cols = QStringList::split("\t", rows[i], true);        for (int j = 0; j < numCols; ++j) {            int row = sel.topRow() + i;            int col = sel.leftCol() + j;            if (row < NumRows && col < NumCols)                setFormula(row, col, cols[j]);        }    }    somethingChanged();}void Spreadsheet::del(){    QTableSelection sel = selection();    for (int i = 0; i < sel.numRows(); ++i) {        for (int j = 0; j < sel.numCols(); ++j)            delete cell(sel.topRow() + i, sel.leftCol() + j);    }    clearSelection();}void Spreadsheet::selectRow(){    clearSelection();    QTable::selectRow(currentRow());}void Spreadsheet::selectColumn(){    clearSelection();    QTable::selectColumn(currentColumn());}void Spreadsheet::selectAll(){    clearSelection();    selectCells(0, 0, NumRows - 1, NumCols - 1);}void Spreadsheet::findNext(const QString &str, bool caseSensitive){    int row = currentRow();    int col = currentColumn() + 1;    while (row < NumRows) {        while (col < NumCols) {            if (text(row, col).contains(str, caseSensitive)) {                clearSelection();                setCurrentCell(row, col);                setActiveWindow();                return;            }            ++col;        }        col = 0;        ++row;    }    qApp->beep();}void Spreadsheet::findPrev(const QString &str, bool caseSensitive){    int row = currentRow();    int col = currentColumn() - 1;    while (row >= 0) {        while (col >= 0) {            if (text(row, col).contains(str, caseSensitive)) {                clearSelection();                setCurrentCell(row, col);                setActiveWindow();                return;            }            --col;        }        col = NumCols - 1;        --row;    }    qApp->beep();}void Spreadsheet::recalculate(){    int row;    for (row = 0; row < NumRows; ++row) {        for (int col = 0; col < NumCols; ++col) {            if (cell(row, col))                cell(row, col)->setDirty();        }    }    for (row = 0; row < NumRows; ++row) {        for (int col = 0; col < NumCols; ++col) {            if (cell(row, col))                updateCell(row, col);        }    }}void Spreadsheet::sort(const SpreadsheetCompare &compare){    vector<QStringList> rows;    QTableSelection sel = selection();    int i;    for (i = 0; i < sel.numRows(); ++i) {        QStringList row;        for (int j = 0; j < sel.numCols(); ++j)            row.push_back(formula(sel.topRow() + i,                                  sel.leftCol() + j));        rows.push_back(row);    }    stable_sort(rows.begin(), rows.end(), compare);    for (i = 0; i < sel.numRows(); ++i) {        for (int j = 0; j < sel.numCols(); ++j)            setFormula(sel.topRow() + i, sel.leftCol() + j,                       rows[i][j]);    }    clearSelection();    somethingChanged();}void Spreadsheet::setAutoRecalculate(bool on){    autoRecalc = on;    if (autoRecalc)        recalculate();}bool SpreadsheetCompare::operator()(const QStringList &row1,                                    const QStringList &row2) const{    for (int i = 0; i < NumKeys; ++i) {        int column = keys[i];        if (column != -1) {            if (row1[column] != row2[column]) {                if (ascending[i])                    return row1[column] < row2[column];                else                    return row1[column] > row2[column];            }        }    }    return false;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级二级| 91蜜桃视频在线| 欧美mv日韩mv| 狠狠色综合播放一区二区| 日韩免费观看高清完整版在线观看| 日本欧美加勒比视频| 91精品综合久久久久久| 老司机精品视频在线| 久久精品欧美日韩精品| 不卡的电视剧免费网站有什么| 亚洲欧洲日韩女同| 在线免费亚洲电影| 美女爽到高潮91| 国产校园另类小说区| 97aⅴ精品视频一二三区| 一区二区三区在线视频免费观看 | 日韩精品一级二级| 日韩午夜激情免费电影| 国产精品1024久久| 亚洲免费资源在线播放| 欧美日韩国产综合一区二区| 奇米精品一区二区三区在线观看| 久久伊人中文字幕| 色婷婷亚洲婷婷| 奇米影视一区二区三区| 国产日产欧美一区| 欧美天堂亚洲电影院在线播放| 日韩高清不卡一区二区三区| 久久久噜噜噜久噜久久综合| 日本精品裸体写真集在线观看 | 国产在线播放一区二区三区| 综合欧美一区二区三区| 日韩三级精品电影久久久| 国产乱人伦偷精品视频免下载| 亚洲精品国久久99热| 日韩欧美色电影| 97超碰欧美中文字幕| 日韩和欧美的一区| 国产精品家庭影院| 日韩欧美国产精品| 色综合久久久久综合| 激情综合色丁香一区二区| 亚洲男同性恋视频| 久久精品一区二区三区不卡牛牛| 欧美伊人久久久久久久久影院| 国产在线精品不卡| 天天影视涩香欲综合网| 亚洲人午夜精品天堂一二香蕉| 欧美成人性福生活免费看| 一本一道久久a久久精品 | 久久se精品一区精品二区| 亚洲精品成a人| 久久精品人人爽人人爽| 欧美一区二区视频在线观看| 91精品福利视频| 国产jizzjizz一区二区| 久久精品国产免费看久久精品| 亚洲自拍偷拍图区| 国产精品免费久久久久| 日韩欧美久久一区| 欧美另类久久久品| 欧美在线看片a免费观看| 成人国产精品免费网站| 国产69精品久久久久毛片| 精品一区二区综合| 蜜桃av一区二区三区| 日韩国产一区二| 午夜日韩在线观看| 一区二区成人在线| 亚洲免费三区一区二区| 国产精品理伦片| 中文字幕国产精品一区二区| 久久看人人爽人人| 久久综合网色—综合色88| 精品久久国产老人久久综合| 欧美久久一二区| 欧美久久婷婷综合色| 欧美肥大bbwbbw高潮| 欧美男女性生活在线直播观看| 欧美亚洲国产一区二区三区va | 欧美成人精品二区三区99精品| 欧美日韩免费电影| 欧美人动与zoxxxx乱| 欧美亚洲另类激情小说| 欧美色视频一区| 欧美肥妇毛茸茸| 正在播放亚洲一区| 欧美成人video| 精品久久久久一区| 国产日本一区二区| 中文字幕在线不卡一区 | 亚洲精品视频一区| 一区二区三区久久| 日韩高清在线不卡| 国内精品免费在线观看| 成人一区在线观看| 色婷婷精品大在线视频| 欧美日韩国产中文| 欧美一区二区日韩| 国产香蕉久久精品综合网| 中文字幕一区二区三区精华液| 亚洲女子a中天字幕| 亚洲国产精品一区二区尤物区| 亚洲电影中文字幕在线观看| 日本女人一区二区三区| 国产一区二区日韩精品| 97se亚洲国产综合自在线不卡| 欧美三级乱人伦电影| 精品国产乱码久久久久久浪潮| 国产午夜精品在线观看| 亚洲精品视频免费看| 日本欧美一区二区三区| 岛国精品在线播放| 欧美视频在线不卡| 久久久久久久久久电影| 一区二区三区免费网站| 美女视频一区在线观看| 99久久久久久| 欧美一卡2卡三卡4卡5免费| 国产欧美一区二区精品性| 一区二区三区自拍| 国产尤物一区二区| 在线视频你懂得一区二区三区| 日韩免费一区二区| 亚洲综合在线免费观看| 国产一本一道久久香蕉| 欧美影院精品一区| 国产精品久久久久影院色老大| 性做久久久久久免费观看欧美| 大白屁股一区二区视频| 777午夜精品视频在线播放| 中文字幕制服丝袜成人av| 美女脱光内衣内裤视频久久影院| 91视频免费观看| 精品国产a毛片| 亚洲高清久久久| av激情亚洲男人天堂| 欧美精品一区二区三区久久久 | 国产一区二区三区在线观看精品 | 亚洲国产一区二区a毛片| 国产精品影视网| 777奇米四色成人影色区| 亚洲欧美综合色| 国产传媒欧美日韩成人| 欧美精品亚洲一区二区在线播放| 国产精品视频一区二区三区不卡| 久久成人免费电影| 欧美精品第1页| 亚洲一卡二卡三卡四卡无卡久久 | 久久精品久久久精品美女| 欧美制服丝袜第一页| 综合久久国产九一剧情麻豆| 国产乱人伦偷精品视频不卡| 欧美成人三级电影在线| 日本午夜精品视频在线观看 | 91精品婷婷国产综合久久性色| 亚洲视频电影在线| 成人不卡免费av| 中文字幕av资源一区| 韩国理伦片一区二区三区在线播放| 欧美日韩mp4| 偷窥国产亚洲免费视频| 欧美怡红院视频| 亚洲精品高清在线| 在线精品国精品国产尤物884a| 成人欧美一区二区三区在线播放| 高清国产一区二区三区| 久久久精品2019中文字幕之3| 国产综合色在线| 国产午夜亚洲精品午夜鲁丝片| 国产精品影音先锋| 中文字幕国产精品一区二区| 丁香一区二区三区| 国产精品天美传媒| 99精品偷自拍| 亚洲激情五月婷婷| 91福利精品第一导航| 亚洲黄色小说网站| 欧美日本一道本在线视频| 日韩在线播放一区二区| 欧美一区二区成人| 国产麻豆成人传媒免费观看| 国产色一区二区| av成人免费在线| 一区二区三区.www| 欧美精品粉嫩高潮一区二区| 麻豆精品久久久| 国产日韩精品一区二区浪潮av | 国内久久精品视频| 久久久久高清精品| 不卡的电视剧免费网站有什么| 亚洲免费在线电影| 91精品国产一区二区| 国产一区二区伦理| 亚洲欧美日韩中文字幕一区二区三区| 日本精品免费观看高清观看| 青青草国产精品亚洲专区无| 2023国产精品自拍| 99re8在线精品视频免费播放| 亚洲国产精品天堂|