Qt實(shí)現(xiàn)繪制網(wǎng)格背景的示例代碼
更新時(shí)間:2022年06月07日 14:06:01 作者:la_vie_est_belle
這篇文章主要介紹了Qt如何實(shí)現(xiàn)繪制網(wǎng)格背景,并且能實(shí)現(xiàn)窗口大小調(diào)整時(shí)網(wǎng)格背景也自動(dòng)調(diào)整重繪,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
現(xiàn)有功能
- 使用滾輪縮放。
- 縮放到達(dá)一定閾值后恢復(fù)網(wǎng)格大小。
- 窗口大小調(diào)整時(shí)網(wǎng)格背景也自動(dòng)調(diào)整重繪。
運(yùn)行結(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(); // 設(shè)置窗口背景顏色
void drawRowLines(QPainter *painter); // 繪制橫線
void drawColLines(QPainter *painter); // 繪制豎線
private:
int minGap; // 最小線間隔
int maxGap; // 最大線間隔
float gap; // 當(dāng)前線間隔
float startX; // 豎線初始x坐標(biāo)(從窗口中間開始)
float startY; // 橫線初始y坐標(biāo)(從窗口中間開始)
QPen lightPen; // 細(xì)一點(diǎn)的畫筆
QPen darkPen; // 粗一點(diǎn)的畫筆
};
#endif // WINDOW_Hwindow.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ù)量的線,就畫一條粗一點(diǎn)的橫線
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ù)量的線,就畫一條粗一點(diǎn)的豎線
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實(shí)現(xiàn)繪制網(wǎng)格背景的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Qt繪制網(wǎng)格背景的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Qt實(shí)現(xiàn)界面滑動(dòng)切換效果的思路詳解
這篇文章主要介紹了Qt實(shí)現(xiàn)界面滑動(dòng)切換效果,主要包括設(shè)計(jì)思路及主要函數(shù)講解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
C語(yǔ)言實(shí)現(xiàn)單詞小助手功能完善版
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)單詞小助手功能的完善版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
C語(yǔ)言經(jīng)典例程100例(經(jīng)典c程序100例)
這篇文章主要介紹了C語(yǔ)言經(jīng)典例程100例,經(jīng)典c程序100例,學(xué)習(xí)c語(yǔ)言的朋友可以參考一下2018-03-03

