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

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

?? spreadsheet.cpp

?? qt3的實例源代碼
?? 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;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av电影在线播放| 久色婷婷小香蕉久久| 亚洲精品日韩专区silk| 同产精品九九九| 国产高清不卡二三区| 在线看国产日韩| 中文字幕精品综合| 麻豆国产91在线播放| 日本高清成人免费播放| 久久精品人人爽人人爽| 蜜桃av一区二区三区电影| 在线观看成人小视频| 中文字幕精品—区二区四季| 久久精品国产99国产| 欧美日韩在线播| 亚洲男同性视频| 成人午夜精品在线| 亚洲国产经典视频| 国产98色在线|日韩| 久久久久久久久蜜桃| 美女诱惑一区二区| 欧美一区二区三级| 奇米影视一区二区三区小说| 色综合久久88色综合天天免费| 国产欧美在线观看一区| 久草热8精品视频在线观看| 91精品国产综合久久香蕉的特点| 亚洲一区免费在线观看| 欧美色国产精品| 亚洲一本大道在线| 欧美日本在线看| 亚洲成人av在线电影| 欧美视频一区二区三区| 午夜精品国产更新| 欧美日韩成人在线| 蜜桃在线一区二区三区| 91精品啪在线观看国产60岁| 日韩高清不卡一区| 日韩亚洲欧美在线| 国产在线一区二区综合免费视频| 日韩一区二区三区免费看 | 欧美视频你懂的| 亚洲丝袜自拍清纯另类| 色中色一区二区| 午夜日韩在线观看| 日韩欧美的一区二区| 国产精品综合一区二区| 国产精品青草综合久久久久99| 99视频超级精品| 亚洲第一在线综合网站| 91精品国产高清一区二区三区蜜臀| 麻豆精品一区二区三区| 中文在线一区二区| 欧美亚洲国产怡红院影院| 午夜欧美一区二区三区在线播放| 欧美日韩成人高清| 韩国精品一区二区| 亚洲免费大片在线观看| 欧美午夜在线观看| 久久99国产精品尤物| 中文字幕精品一区二区精品绿巨人| 色欧美88888久久久久久影院| 香蕉久久一区二区不卡无毒影院| 亚洲精品一区二区三区在线观看 | 亚洲成人激情av| 日韩精品一区二区三区视频| 成人小视频在线| 亚洲一二三区不卡| 国产日韩精品一区二区三区| 99精品视频一区二区三区| 爽好多水快深点欧美视频| 欧美极品另类videosde| 欧美日韩午夜在线视频| 国产suv精品一区二区三区| 亚洲一区二区三区四区在线免费观看 | 欧美日韩国产高清一区二区三区 | 欧美一级二级三级乱码| 国产成人精品一区二| 午夜一区二区三区在线观看| 久久久影院官网| 欧美日韩黄色影视| 99久久综合精品| 久久精品久久综合| 婷婷综合五月天| 国产精品福利av| 欧美哺乳videos| 欧美午夜片在线看| 成人国产精品免费观看动漫| 老司机精品视频在线| 亚洲成人自拍偷拍| 国产精品久久久久永久免费观看 | 日韩精品一区在线| 欧美三级欧美一级| 99天天综合性| 国产宾馆实践打屁股91| 看电影不卡的网站| 日韩精品乱码av一区二区| 亚洲素人一区二区| 中文字幕免费观看一区| 精品国产髙清在线看国产毛片| 日本高清不卡一区| 91原创在线视频| 91视频一区二区三区| 成人网页在线观看| 成人爽a毛片一区二区免费| 经典三级一区二区| 久久er99热精品一区二区| 日本不卡视频在线观看| 天堂午夜影视日韩欧美一区二区| 亚洲资源中文字幕| 亚洲一区二区精品3399| 亚洲综合另类小说| 亚洲大片免费看| 日韩专区欧美专区| 老司机午夜精品| 久久精品国产免费看久久精品| 麻豆精品在线播放| 国产美女一区二区三区| 国产麻豆成人传媒免费观看| 激情另类小说区图片区视频区| 国内精品久久久久影院色| 精品一二线国产| 国产精品综合二区| jizzjizzjizz欧美| 91看片淫黄大片一级在线观看| 色综合天天综合网天天狠天天| 日本韩国欧美一区| 91麻豆精品久久久久蜜臀| 91精品国产福利| 精品91自产拍在线观看一区| 久久久噜噜噜久噜久久综合| 国产亚洲综合色| 国产精品国产三级国产普通话99 | 亚洲精品乱码久久久久久久久| 亚洲欧洲精品天堂一级 | 免费观看在线色综合| 精彩视频一区二区三区| 播五月开心婷婷综合| 日本久久一区二区| 欧美成人一区二区| 国产精品乱子久久久久| 亚洲综合成人在线视频| 日本麻豆一区二区三区视频| 国产综合色产在线精品| eeuss鲁一区二区三区| 欧美三级乱人伦电影| 日韩欧美高清一区| 国产精品高潮久久久久无| 亚洲成年人网站在线观看| 九色porny丨国产精品| 91女人视频在线观看| 88在线观看91蜜桃国自产| 久久影院电视剧免费观看| 亚洲欧美日韩人成在线播放| 麻豆精品一区二区av白丝在线| 国产成人免费视频网站高清观看视频| 97精品久久久久中文字幕| 欧美一区二区三区在线电影| 国产性天天综合网| 午夜av一区二区三区| 国产成a人亚洲精| 4hu四虎永久在线影院成人| 久久久.com| 日韩电影免费在线看| 成人免费视频网站在线观看| 欧美精品少妇一区二区三区| 日本一区二区免费在线| 免费成人性网站| 色狠狠色噜噜噜综合网| 国产人成一区二区三区影院| 三级欧美韩日大片在线看| 97久久精品人人做人人爽50路| 精品国产一区a| 亚洲成人免费在线| 91福利国产精品| 亚洲同性同志一二三专区| 国产福利一区二区三区视频在线| 欧美色成人综合| 亚洲综合在线五月| 99国产精品久久久久久久久久久| 久久婷婷国产综合精品青草 | 日韩一本二本av| 亚洲国产视频在线| 一本色道亚洲精品aⅴ| 中文字幕av一区二区三区免费看| 男男gaygay亚洲| 日韩丝袜美女视频| 五月婷婷激情综合网| 欧美网站大全在线观看| 国产精品传媒视频| 成人av免费观看| 国产精品入口麻豆原神| 国产电影精品久久禁18| 国产亚洲一区字幕| 国产成人综合自拍| 国产三级精品三级| 成人免费视频网站在线观看| 亚洲高清视频中文字幕| 91电影在线观看| 亚洲高清一区二区三区|