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

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

?? plotter.cpp

?? 關(guān)于嵌入式的QT圖形用戶界面C GUI Programming with QT4書籍的配套源碼
?? 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一区二区三区免费野_久草精品视频
欧美卡1卡2卡| 粉嫩av一区二区三区粉嫩| 欧美日韩综合色| 亚洲成人午夜电影| 欧美一级艳片视频免费观看| 久久97超碰色| 精品伦理精品一区| 高清不卡一区二区在线| 中文字幕在线观看不卡| 在线观看日韩一区| 美女在线观看视频一区二区| 久久久激情视频| 91丝袜国产在线播放| 亚瑟在线精品视频| 欧美精品一区二区三区高清aⅴ| 国产精品1区2区| 亚洲乱码精品一二三四区日韩在线| 欧美在线一区二区三区| 免费国产亚洲视频| 国产精品色在线| 欧美色图激情小说| 国产在线一区二区综合免费视频| 国产精品欧美一区二区三区| 91国产福利在线| 激情五月婷婷综合| 亚洲欧美国产毛片在线| 欧美剧情片在线观看| 国产很黄免费观看久久| 亚洲一区二区不卡免费| 欧美精品一区视频| 欧美在线|欧美| 国产盗摄一区二区| 丝袜亚洲精品中文字幕一区| 国产欧美精品国产国产专区| 制服丝袜一区二区三区| 国产成人av资源| 青青草精品视频| 亚洲人成小说网站色在线| 日韩视频一区二区三区在线播放 | 欧美午夜精品一区二区蜜桃| 精品一区中文字幕| 亚洲午夜激情av| 国产精品色噜噜| 精品日韩一区二区三区免费视频| 91福利视频久久久久| 国产成人免费高清| 久久97超碰国产精品超碰| 亚洲影院理伦片| 欧美国产激情一区二区三区蜜月| 欧美大片在线观看一区二区| 在线观看欧美日本| 91一区在线观看| 国产a视频精品免费观看| 久久精品国内一区二区三区| 亚洲自拍偷拍九九九| 亚洲欧洲综合另类| 日本一区二区三区国色天香| 日韩免费成人网| 欧美二区三区的天堂| 色悠久久久久综合欧美99| 成人av电影免费在线播放| 激情伊人五月天久久综合| 日韩中文字幕亚洲一区二区va在线 | 香蕉加勒比综合久久| 亚洲欧美日韩国产综合| 国产精品沙发午睡系列990531| 久久久久综合网| 久久中文娱乐网| 337p日本欧洲亚洲大胆精品| 日韩丝袜情趣美女图片| 欧美一区二区视频在线观看2022| 欧美日韩免费高清一区色橹橹| 一本久道中文字幕精品亚洲嫩| 成人av资源站| 欧美性猛片aaaaaaa做受| 色网站国产精品| 色8久久精品久久久久久蜜| 在线亚洲精品福利网址导航| 99re6这里只有精品视频在线观看| 99re热视频精品| 欧美主播一区二区三区| 欧美三级一区二区| 91精品国产综合久久久久久久| 欧美日高清视频| 欧美一区二区三区在线看| 欧美一区二视频| 久久免费视频色| 成人欧美一区二区三区小说| 亚洲丝袜另类动漫二区| 一区二区免费视频| 日本 国产 欧美色综合| 国内精品写真在线观看| 国产91精品露脸国语对白| 91视频com| 欧美猛男超大videosgay| 日韩视频一区在线观看| 国产欧美va欧美不卡在线| 中文字幕在线不卡一区| 亚洲成人黄色影院| 精一区二区三区| 91在线观看污| 欧美精品高清视频| 久久一区二区三区国产精品| 国产欧美视频一区二区| 亚洲综合激情网| 狠狠色丁香婷综合久久| 99久久精品国产一区二区三区| 在线观看视频一区| 精品91自产拍在线观看一区| 国产精品美女www爽爽爽| 亚洲成人av电影| 国内外成人在线视频| 一本大道久久a久久综合| 91精品在线免费| 国产精品女人毛片| 亚洲成a人片在线观看中文| 国内精品嫩模私拍在线| 色综合欧美在线视频区| 日韩欧美色综合| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 天天综合网天天综合色| 丁香天五香天堂综合| 在线不卡一区二区| 国产精品不卡在线观看| 老汉av免费一区二区三区| 91免费观看在线| 久久亚洲精华国产精华液| 亚洲一二三级电影| 波波电影院一区二区三区| 欧美一区二区三区在线电影| 日韩美女啊v在线免费观看| 国产专区欧美精品| 4438x成人网最大色成网站| 国产精品久久久久永久免费观看 | 久久综合九色综合97_久久久| √…a在线天堂一区| 捆绑变态av一区二区三区| 91视频.com| 国产精品三级视频| 蜜桃av一区二区| 欧美日韩一区久久| 亚洲精品一二三区| 成人免费黄色大片| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲国产三级在线| 色婷婷国产精品| ㊣最新国产の精品bt伙计久久| 国产剧情一区二区| 欧美电视剧免费观看| 日韩vs国产vs欧美| 欧美视频在线观看一区| 中文字幕一区二区三区不卡| 懂色中文一区二区在线播放| 日韩久久免费av| 免费人成精品欧美精品| 欧美日韩免费一区二区三区视频| 亚洲天堂av老司机| 99国产精品久久久久| 国产精品美女一区二区三区| 国产伦精品一区二区三区视频青涩| 欧美久久婷婷综合色| 亚洲成人资源在线| 欧美在线播放高清精品| 亚洲国产精品久久一线不卡| 色爱区综合激月婷婷| 伊人开心综合网| 欧美午夜电影一区| 亚洲v中文字幕| 欧美乱熟臀69xxxxxx| 亚欧色一区w666天堂| 欧美美女一区二区三区| 热久久国产精品| 亚洲精品在线网站| 国产91富婆露脸刺激对白| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品99久久久久久宅男| 欧美激情在线一区二区| 99久久精品免费看国产免费软件| 日韩码欧中文字| 欧美性受xxxx| 日本aⅴ亚洲精品中文乱码| 欧美电影免费观看高清完整版在线观看 | 精品少妇一区二区三区| 国产一区二区h| 中文字幕日本乱码精品影院| 91国偷自产一区二区使用方法| 亚洲午夜激情av| 精品日韩一区二区三区| 国产精品2024| 亚洲另类春色校园小说| 欧美日韩国产精选| 国产精品自拍一区| 午夜免费久久看| 精品少妇一区二区三区视频免付费| 国产成人免费高清| 亚洲第一狼人社区| 久久人人爽爽爽人久久久| 91丨porny丨首页| 日日欢夜夜爽一区| 国产精品欧美久久久久一区二区|