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

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

?? plotter.cpp

?? 圖像看圖處理 qt 初學(xué)者的好例子 可以很快上手 歡迎使用 多謝留言指點
?? CPP
字號:
#include <QtGui>#include <cmath>#include "plotter.h"using namespace std;Plotter::Plotter(QWidget *parent)    : QWidget(parent){    setBackgroundRole(QPalette::Dark);    setAutoFillBackground(true);    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);    setFocusPolicy(Qt::StrongFocus);    rubberBandIsShown = false;    zoomInButton = new QToolButton(this);    zoomInButton->setIcon(QIcon(":/images/zoomin.png"));    zoomInButton->adjustSize();    connect(zoomInButton, SIGNAL(clicked()), this, SLOT(zoomIn()));    zoomOutButton = new QToolButton(this);    zoomOutButton->setIcon(QIcon(":/images/zoomout.png"));    zoomOutButton->adjustSize();    connect(zoomOutButton, SIGNAL(clicked()), this, SLOT(zoomOut()));    setPlotSettings(PlotSettings());}void Plotter::setPlotSettings(const PlotSettings &settings){    zoomStack.clear();    zoomStack.append(settings);    curZoom = 0;    zoomInButton->hide();    zoomOutButton->hide();    refreshPixmap();}void Plotter::zoomOut(){    if (curZoom > 0) {        --curZoom;        zoomOutButton->setEnabled(curZoom > 0);        zoomInButton->setEnabled(true);        zoomInButton->show();        refreshPixmap();    }}void Plotter::zoomIn(){    if (curZoom < zoomStack.count() - 1) {        ++curZoom;        zoomInButton->setEnabled(curZoom < zoomStack.count() - 1);        zoomOutButton->setEnabled(true);        zoomOutButton->show();        refreshPixmap();    }}void Plotter::setCurveData(int id, const QVector<QPointF> &data){    curveMap[id] = data;    refreshPixmap();}void Plotter::clearCurve(int id){    curveMap.remove(id);    refreshPixmap();}QSize Plotter::minimumSizeHint() const{    return QSize(6 * Margin, 4 * Margin);}QSize Plotter::sizeHint() const{    return QSize(12 * Margin, 8 * Margin);}void Plotter::paintEvent(QPaintEvent * /* event */){    QStylePainter painter(this);    painter.drawPixmap(0, 0, pixmap);    if (rubberBandIsShown) {        painter.setPen(palette().light().color());        painter.drawRect(rubberBandRect.normalized()                                       .adjusted(0, 0, -1, -1));    }    if (hasFocus()) {        QStyleOptionFocusRect option;        option.initFrom(this);        option.backgroundColor = palette().dark().color();        painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);    }}void Plotter::resizeEvent(QResizeEvent * /* event */){    int x = width() - (zoomInButton->width()                       + zoomOutButton->width() + 10);    zoomInButton->move(x, 5);    zoomOutButton->move(x + zoomInButton->width() + 5, 5);    refreshPixmap();}void Plotter::mousePressEvent(QMouseEvent *event){    QRect rect(Margin, Margin,               width() - 2 * Margin, height() - 2 * Margin);    if (event->button() == Qt::LeftButton) {        if (rect.contains(event->pos())) {            rubberBandIsShown = true;            rubberBandRect.setTopLeft(event->pos());            rubberBandRect.setBottomRight(event->pos());            updateRubberBandRegion();            setCursor(Qt::CrossCursor);        }    }}void Plotter::mouseMoveEvent(QMouseEvent *event){    if (rubberBandIsShown) {        updateRubberBandRegion();        rubberBandRect.setBottomRight(event->pos());        updateRubberBandRegion();    }}void Plotter::mouseReleaseEvent(QMouseEvent *event){    if ((event->button() == Qt::LeftButton) && rubberBandIsShown) {        rubberBandIsShown = false;        updateRubberBandRegion();        unsetCursor();        QRect rect = rubberBandRect.normalized();        if (rect.width() < 4 || rect.height() < 4)            return;        rect.translate(-Margin, -Margin);        PlotSettings prevSettings = zoomStack[curZoom];        PlotSettings settings;        double dx = prevSettings.spanX() / (width() - 2 * Margin);        double dy = prevSettings.spanY() / (height() - 2 * Margin);        settings.minX = prevSettings.minX + dx * rect.left();        settings.maxX = prevSettings.minX + dx * rect.right();        settings.minY = prevSettings.maxY - dy * rect.bottom();        settings.maxY = prevSettings.maxY - dy * rect.top();        settings.adjust();        zoomStack.resize(curZoom + 1);        zoomStack.append(settings);        zoomIn();    }}void Plotter::keyPressEvent(QKeyEvent *event){    switch (event->key()) {    case Qt::Key_Plus:        zoomIn();        break;    case Qt::Key_Minus:        zoomOut();        break;    case Qt::Key_Left:        zoomStack[curZoom].scroll(-1, 0);        refreshPixmap();        break;    case Qt::Key_Right:        zoomStack[curZoom].scroll(+1, 0);        refreshPixmap();        break;    case Qt::Key_Down:        zoomStack[curZoom].scroll(0, -1);        refreshPixmap();        break;    case Qt::Key_Up:        zoomStack[curZoom].scroll(0, +1);        refreshPixmap();        break;    default:        QWidget::keyPressEvent(event);    }}void Plotter::wheelEvent(QWheelEvent *event){    int numDegrees = event->delta() / 8;    int numTicks = numDegrees / 15;    if (event->orientation() == Qt::Horizontal) {        zoomStack[curZoom].scroll(numTicks, 0);    } else {        zoomStack[curZoom].scroll(0, numTicks);    }    refreshPixmap();}void Plotter::updateRubberBandRegion(){    QRect rect = rubberBandRect.normalized();    update(rect.left(), rect.top(), rect.width(), 1);    update(rect.left(), rect.top(), 1, rect.height());    update(rect.left(), rect.bottom(), rect.width(), 1);    update(rect.right(), rect.top(), 1, rect.height());}void Plotter::refreshPixmap(){    pixmap = QPixmap(size());    pixmap.fill(this, 0, 0);    QPainter painter(&pixmap);    painter.initFrom(this);    drawGrid(&painter);    drawCurves(&painter);    update();}void Plotter::drawGrid(QPainter *painter){    QRect rect(Margin, Margin,               width() - 2 * Margin, height() - 2 * Margin);    if (!rect.isValid())        return;    PlotSettings settings = zoomStack[curZoom];    QPen quiteDark = palette().dark().color().light();    QPen light = palette().light().color();    for (int i = 0; i <= settings.numXTicks; ++i) {        int x = rect.left() + (i * (rect.width() - 1)                                 / settings.numXTicks);        double label = settings.minX + (i * settings.spanX()                                          / settings.numXTicks);        painter->setPen(quiteDark);        painter->drawLine(x, rect.top(), x, rect.bottom());        painter->setPen(light);        painter->drawLine(x, rect.bottom(), x, rect.bottom() + 5);        painter->drawText(x - 50, rect.bottom() + 5, 100, 15,                          Qt::AlignHCenter | Qt::AlignTop,                          QString::number(label));    }    for (int j = 0; j <= settings.numYTicks; ++j) {        int y = rect.bottom() - (j * (rect.height() - 1)                                   / settings.numYTicks);        double label = settings.minY + (j * settings.spanY()                                          / settings.numYTicks);        painter->setPen(quiteDark);        painter->drawLine(rect.left(), y, rect.right(), y);        painter->setPen(light);        painter->drawLine(rect.left() - 5, y, rect.left(), y);        painter->drawText(rect.left() - Margin, y - 10, Margin - 5, 20,                          Qt::AlignRight | Qt::AlignVCenter,                          QString::number(label));    }    painter->drawRect(rect.adjusted(0, 0, -1, -1));}void Plotter::drawCurves(QPainter *painter){    static const QColor colorForIds[6] = {        Qt::red, Qt::green, Qt::blue, Qt::cyan, Qt::magenta, Qt::yellow    };    PlotSettings settings = zoomStack[curZoom];    QRect rect(Margin, Margin,               width() - 2 * Margin, height() - 2 * Margin);    if (!rect.isValid())        return;    painter->setClipRect(rect.adjusted(+1, +1, -1, -1));    QMapIterator<int, QVector<QPointF> > i(curveMap);    while (i.hasNext()) {        i.next();        int id = i.key();        const QVector<QPointF> &data = i.value();        QPolygonF polyline(data.count());        for (int j = 0; j < data.count(); ++j) {            double dx = data[j].x() - settings.minX;            double dy = data[j].y() - settings.minY;            double x = rect.left() + (dx * (rect.width() - 1)                                         / settings.spanX());            double y = rect.bottom() - (dy * (rect.height() - 1)                                           / settings.spanY());            polyline[j] = QPointF(x, y);        }        painter->setPen(colorForIds[uint(id) % 6]);        painter->drawPolyline(polyline);    }}PlotSettings::PlotSettings(){    minX = 0.0;    maxX = 10.0;    numXTicks = 5;    minY = 0.0;    maxY = 10.0;    numYTicks = 5;}void PlotSettings::scroll(int dx, int dy){    double stepX = spanX() / numXTicks;    minX += dx * stepX;    maxX += dx * stepX;    double stepY = spanY() / numYTicks;    minY += dy * stepY;    maxY += dy * stepY;}void PlotSettings::adjust(){    adjustAxis(minX, maxX, numXTicks);    adjustAxis(minY, maxY, numYTicks);}void PlotSettings::adjustAxis(double &min, double &max,                              int &numTicks){    const int MinTicks = 4;    double grossStep = (max - min) / MinTicks;    double step = pow(10.0, floor(log10(grossStep)));    if (5 * step < grossStep) {        step *= 5;    } else if (2 * step < grossStep) {        step *= 2;    }    numTicks = int(ceil(max / step) - floor(min / step));    if (numTicks < MinTicks)        numTicks = MinTicks;    min = floor(min / step) * step;    max = ceil(max / step) * step;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉完整版 | 欧美视频在线一区| 一区二区三区四区在线| 欧洲一区二区三区免费视频| 亚洲国产欧美在线人成| 91精品国产综合久久久久久久| 91论坛在线播放| 色欧美日韩亚洲| 亚洲一区成人在线| 3atv一区二区三区| 国产精品一二三区在线| 亚洲婷婷综合色高清在线| 欧美影院一区二区| 精彩视频一区二区| 中文字幕av在线一区二区三区| 色婷婷综合久色| 日韩电影在线免费观看| 欧美精品一区二区久久婷婷| 99这里都是精品| 爽好久久久欧美精品| 久久精品男人天堂av| 一本色道久久综合亚洲精品按摩| 日本欧美大码aⅴ在线播放| 久久一区二区三区四区| 91福利在线导航| 韩国成人福利片在线播放| 亚洲美女免费视频| 日韩免费观看2025年上映的电影| 久久国产综合精品| 日韩一区中文字幕| 欧美成人精品1314www| 北岛玲一区二区三区四区| 亚洲午夜久久久久中文字幕久| 久久伊99综合婷婷久久伊| 在线观看亚洲a| 国产高清成人在线| 免费观看在线综合| 亚洲人成网站影音先锋播放| 日韩午夜在线观看| 91黄色激情网站| 国产成人综合亚洲网站| 美女www一区二区| 亚洲欧美另类图片小说| 成人欧美一区二区三区| 欧美mv和日韩mv的网站| 欧美日韩一区视频| 91色porny在线视频| 福利一区二区在线观看| 麻豆精品国产91久久久久久| 亚洲一区二区三区免费视频| 国产精品乱码人人做人人爱| 久久久久久免费毛片精品| av日韩在线网站| 日韩欧美一区在线观看| av网站免费线看精品| 麻豆高清免费国产一区| 亚洲男人的天堂在线观看| 久久这里只有精品首页| 欧美一区二区观看视频| 欧美日韩三级视频| 色噜噜夜夜夜综合网| 99久久婷婷国产综合精品电影| 国产精品一区二区三区乱码| 蜜桃精品在线观看| 美女国产一区二区三区| 国产一本一道久久香蕉| 亚洲午夜视频在线观看| 中文字幕中文字幕一区二区| 国产视频一区在线观看 | 久久国产尿小便嘘嘘尿| 亚洲第一综合色| 亚洲国产视频一区| 亚洲午夜电影在线观看| 一区二区免费看| 亚洲成av人**亚洲成av**| 亚洲不卡av一区二区三区| 亚洲大型综合色站| 日本视频免费一区| 久久66热re国产| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品一区二区在线看| 高清成人免费视频| 91免费版在线| 欧美怡红院视频| 91精品国产综合久久香蕉麻豆| 亚洲裸体xxx| 国产精品理论片| 亚洲精品美国一| 午夜精彩视频在线观看不卡| 94-欧美-setu| 风间由美中文字幕在线看视频国产欧美| 精品一区二区三区香蕉蜜桃| 国产精品一品视频| 91视频观看视频| 欧美日韩亚洲综合在线 | 91精品国产综合久久精品app| 日韩精品在线看片z| 国产日韩综合av| 一区二区三区资源| 日韩avvvv在线播放| 国产精品性做久久久久久| 97成人超碰视| 日韩一卡二卡三卡| 国产欧美日本一区二区三区| 一区二区免费视频| 久久99精品国产91久久来源| 成人免费视频国产在线观看| 色乱码一区二区三区88| 欧美videossexotv100| 中文字幕在线视频一区| 午夜精品久久久久久久久久久| 欧美一二三四在线| 91精品福利在线一区二区三区| 欧美精品一区二区三区一线天视频| 国产精品二三区| 免费高清在线一区| 91小视频免费观看| 日韩一区国产二区欧美三区| ...xxx性欧美| 九九久久精品视频| 欧洲视频一区二区| 久久久www免费人成精品| 午夜精彩视频在线观看不卡| 成人精品视频.| 欧美一卡在线观看| 亚洲乱码一区二区三区在线观看| 久久99精品久久只有精品| 91蜜桃在线观看| 久久精品亚洲麻豆av一区二区| 一级日本不卡的影视| 大白屁股一区二区视频| 91精品国产免费| 亚洲精品乱码久久久久| 国产福利一区二区三区在线视频| 欧美精选一区二区| 一二三四社区欧美黄| 成人免费视频免费观看| 欧美精品一区二区三区久久久 | 国产精品综合二区| 91精品国产91久久久久久一区二区| 亚洲精品国产品国语在线app| 国产精品一区二区果冻传媒| 欧美一卡2卡三卡4卡5免费| 亚洲欧美另类久久久精品| 粉嫩av一区二区三区在线播放 | 日韩一区二区三区av| 亚洲一区二区3| 色综合久久88色综合天天免费| 国产日韩高清在线| 国产原创一区二区| 日韩三级在线观看| 首页亚洲欧美制服丝腿| 欧美日韩精品一区二区在线播放| 18涩涩午夜精品.www| av在线不卡网| 国产精品久久久久精k8| av男人天堂一区| 1000部国产精品成人观看| 波多野结衣在线一区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 石原莉奈一区二区三区在线观看| 欧洲国内综合视频| 亚洲国产精品人人做人人爽| 欧美日韩中文字幕精品| 亚洲国产欧美日韩另类综合| 欧美日韩国产小视频| 午夜精品福利一区二区蜜股av| 欧美日韩日日摸| 日本三级韩国三级欧美三级| 日韩久久免费av| 韩国女主播成人在线观看| 国产亚洲成aⅴ人片在线观看 | 色婷婷精品久久二区二区蜜臂av| 日韩毛片视频在线看| 色婷婷久久一区二区三区麻豆| 伊人一区二区三区| 欧美日韩激情一区二区三区| 日韩福利视频网| 久久久午夜精品| 99免费精品视频| 亚洲一区二区在线免费看| 9191成人精品久久| 国产一区二区三区免费观看| 欧美极品美女视频| 日本道免费精品一区二区三区| 亚洲成人1区2区| 久久综合资源网| 成人av网站大全| 亚洲精品视频观看| 91精品欧美综合在线观看最新| 国产一区二区91| 亚洲视频在线一区| 欧美一卡在线观看| 成人av第一页| 午夜精品免费在线| 欧美激情一区二区三区不卡 | 欧美美女激情18p| 国内精品视频666| 伊人一区二区三区| 久久综合久久久久88|