双缓冲学习总结一网格(根据教程学习)

来源:互联网 发布:人工智能的威胁 编辑:程序博客网 时间:2024/06/08 03:25

第一步:创建工程plotter

第二步:根据效果图,写上变量和类:



第三步:横纵坐标

.h文件中

class PlotSettings
{
public:
    PlotSettings();


    void scroll(int dx, int dy);
    void adjust();
    double spanX() const { return maxX - minX; } //计算横坐标跨度
    double spanY() const { return maxY - minY; } //计算纵坐标跨度


    double minX;//横坐标最小
    double maxX;//横坐标最大
    int numXTicks;//网格


    double minY;//纵坐标最小
    double maxY;//纵坐标最大
    int numYTicks;//网格


private:
    static void adjustAxis(double &min, double &max, int &numTicks);//取整计算


};

.cpp文件中:

1.设置调色板颜色为黑色:

 setBackgroundRole(QPalette::Dark);//调色板背景色改为深色
    setAutoFillBackground(true);//自动的做出来

2.绘制网格(drawGrid):

准备:

    QRect rect(Margin,Margin,width()-2 * Margin,height()-2 * Margin);//检查窗口是否小
    if(!rect.isValid())//无效则直接return
    return;
    PlotSettings settings = zoomStack[curZoom];//把settings取出
    //准备画笔
    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()/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() - 5, x, rect.bottom() + 5);
        painter->drawText(x - 50,rect.bottom() + 5, 100, 20,
                          Qt::AlignCenter|Qt::AlignTop, QString::number(label));
    }

画纵坐标:

for(int j=0;j<=settings.numYTicks;++j)
    {
        int y = rect.bottom() - j * rect.height()/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));
    }










































0 0
原创粉丝点击