最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實現(xiàn)繪制網(wǎng)格背景的示例代碼

 更新時間:2022年06月07日 14:06:01   作者:la_vie_est_belle  
這篇文章主要介紹了Qt如何實現(xiàn)繪制網(wǎng)格背景,并且能實現(xiàn)窗口大小調(diào)整時網(wǎng)格背景也自動調(diào)整重繪,感興趣的小伙伴可以跟隨小編一起學習一下

現(xiàn)有功能

  • 使用滾輪縮放。
  • 縮放到達一定閾值后恢復網(wǎng)格大小。
  • 窗口大小調(diào)整時網(wǎng)格背景也自動調(diào)整重繪。

運行結(jié)果

源碼

window.h

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>
#include <QPen>
#include <QPainter>
#include <QPaintEvent>

class Window : public QWidget
{
    Q_OBJECT

public:
    Window(QWidget *parent = nullptr);
    ~Window();

protected:
    void paintEvent(QPaintEvent *event);
    void wheelEvent(QWheelEvent *event);
    void resizeEvent(QResizeEvent *event);

private:
    void setBackgroundColor();              // 設置窗口背景顏色
    void drawRowLines(QPainter *painter);   // 繪制橫線
    void drawColLines(QPainter *painter);   // 繪制豎線

private:
   int minGap;                              // 最小線間隔
   int maxGap;                              // 最大線間隔
   float gap;                               // 當前線間隔
   float startX;                            // 豎線初始x坐標(從窗口中間開始)
   float startY;                            // 橫線初始y坐標(從窗口中間開始)
   QPen lightPen;                           // 細一點的畫筆
   QPen darkPen;                            // 粗一點的畫筆
};
#endif // WINDOW_H

window.cpp

#include "window.h"
#include <QColor>
#include <QPalette>
#include <QPointF>

Window::Window(QWidget *parent)
    : QWidget(parent)
{
    this->minGap = 4;
    this->maxGap = 14;
    this->gap = (this->minGap + this->maxGap) / 2;
    this->startX = this->width() / 2;
    this->startY = this->height() / 2;
    this->lightPen = QPen(QColor(222, 222, 222));
    this->darkPen = QPen(QColor(222, 222, 222));
    this->darkPen.setWidth(2);

    this->setBackgroundColor();
}

Window::~Window()
{
}

void Window::setBackgroundColor() {
    QPalette palette;
    palette.setColor(QPalette::Background, QColor(250, 250, 250));
    this->setPalette(palette);
    this->setAutoFillBackground(true);
}

void Window::drawRowLines(QPainter *painter) {
    int lineCount = 0;
    float biggerY = this->startY;
    float smallerY = this->startY;

    painter->setPen(this->darkPen);

    while (true) {
        painter->drawLine(QPointF(0.0, biggerY), QPointF(this->width(), biggerY));
        painter->drawLine(QPointF(0.0, smallerY), QPointF(this->width(), smallerY));

        biggerY += this->gap;
        smallerY -= this->gap;
        if (smallerY <= 0 || biggerY >= this->height()) {
            break;
        }

        // 每間隔一定數(shù)量的線,就畫一條粗一點的橫線
        lineCount += 1;
        if (lineCount == 10) {
            painter->setPen(this->darkPen);
            lineCount = 0;
        }
        else {
            painter->setPen(this->lightPen);
        }
    }

}

void Window::drawColLines(QPainter *painter) {
    int lineCount = 0;
    float biggerX = this->startX;
    float smallerX = this->startX;

    painter->setPen(this->darkPen);

    while (true) {
        painter->drawLine(QPointF(biggerX, 0.0), QPointF(biggerX, this->height()));
        painter->drawLine(QPointF(smallerX, 0.0), QPointF(smallerX, this->height()));

        biggerX += this->gap;
        smallerX -= this->gap;
        if (smallerX <= 0 || biggerX >= this->width()) {
            break;
        }

        // 每間隔一定數(shù)量的線,就畫一條粗一點的豎線
        lineCount += 1;
        if (lineCount == 10) {
            painter->setPen(this->darkPen);
            lineCount = 0;
        }
        else {
            painter->setPen(this->lightPen);
        }
    }

}

void Window::paintEvent(QPaintEvent *event) {
    QWidget::paintEvent(event);
    QPainter painter(this);
    this->drawRowLines(&painter);
    this->drawColLines(&painter);
}

void Window::wheelEvent(QWheelEvent *event) {
    QWidget::wheelEvent(event);
    if (event->angleDelta().y() > 0) {
        this->gap += 0.1;
    }
    else if (event->angleDelta().y() < 0) {
        this->gap -= 0.1;
    }

    if (this->gap >= this->maxGap) {
        this->gap = this->minGap;
    }
    else if (this->gap <= this->minGap) {
        this->gap = this->maxGap;
    }

    this->update();
}

void Window::resizeEvent(QResizeEvent *event) {
    QWidget::resizeEvent(event);
    this->startX = this->width() / 2;
    this->startY = this->height() / 2;
    this->update();
}

main.cpp

#include "window.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Window w;
    w.show();
    return a.exec();
}

以上就是Qt實現(xiàn)繪制網(wǎng)格背景的示例代碼的詳細內(nèi)容,更多關(guān)于Qt繪制網(wǎng)格背景的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解c/c++ 內(nèi)存對齊

    深入理解c/c++ 內(nèi)存對齊

    這篇文章主要介紹了c/c++ 內(nèi)存對齊,有需要的朋友可以參考一下
    2014-01-01
  • Qt實現(xiàn)界面滑動切換效果的思路詳解

    Qt實現(xiàn)界面滑動切換效果的思路詳解

    這篇文章主要介紹了Qt實現(xiàn)界面滑動切換效果,主要包括設計思路及主要函數(shù)講解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 深入解析C中的數(shù)值與真假

    深入解析C中的數(shù)值與真假

    本篇文章是對C中數(shù)值與真假進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺析c++ 中const關(guān)鍵字

    淺析c++ 中const關(guān)鍵字

    const是一個C++語言的限定符,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。下面通過本文給大家分享c++ const關(guān)鍵字的相關(guān)知識,一起看看吧
    2017-06-06
  • C語言實現(xiàn)單詞小助手功能完善版

    C語言實現(xiàn)單詞小助手功能完善版

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)單詞小助手功能的完善版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 淺析C語言中堆和棧的區(qū)別

    淺析C語言中堆和棧的區(qū)別

    堆和棧都是一種數(shù)據(jù)項按序排列的數(shù)據(jù)結(jié)構(gòu)。在C語言中是非常重要的知識點,接下來通過本文給大家介紹C語言中堆和棧的區(qū)別,感興趣的朋友一起看下吧
    2016-06-06
  • C++實現(xiàn)二叉樹及堆的示例代碼

    C++實現(xiàn)二叉樹及堆的示例代碼

    這篇文章主要介紹了C++實現(xiàn)二叉樹及堆的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C語言規(guī)律循環(huán)累加求和案例

    C語言規(guī)律循環(huán)累加求和案例

    這篇文章主要介紹了C語言規(guī)律循環(huán)累加求和案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • MFC繪制不規(guī)則窗體的方法

    MFC繪制不規(guī)則窗體的方法

    這篇文章主要介紹了MFC繪制不規(guī)則窗體的方法,涉及MFC窗體操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C語言經(jīng)典例程100例(經(jīng)典c程序100例)

    C語言經(jīng)典例程100例(經(jīng)典c程序100例)

    這篇文章主要介紹了C語言經(jīng)典例程100例,經(jīng)典c程序100例,學習c語言的朋友可以參考一下
    2018-03-03

最新評論

广西| 泸州市| 额尔古纳市| 淮滨县| 且末县| 玉环县| 海南省| 孟村| 新兴县| 高邮市| 潢川县| 辽源市| 安陆市| 河西区| 寿阳县| 二连浩特市| 鲜城| 隆尧县| 成安县| 平遥县| 历史| 哈巴河县| 本溪市| 隆林| 西和县| 灌南县| 卓资县| 虞城县| 吴旗县| 华蓥市| 栖霞市| 望江县| 佛学| 小金县| 建宁县| 巴彦淖尔市| 新巴尔虎左旗| 抚顺县| 岗巴县| 林州市| 南涧|