Bootstrap

Qt中使用QGraphicsScene重写drawBackGround绘制背景

Qt中使用QGraphicsScene重写drawBackGround绘制背景

需求解释

我是想这学习Qt的界面设计,希望能够对界面背景进行优化然后使用Qt的界面与图形画背景网格。

首先查资料

  1. 通过查找博客发现很简单,就是新建一个类继承于QGraphicsScene,于是我就直接上手写了内容 代码.
// 实现类
#include "mygraph.h"
#include <QPen>
#include <QPainter>
#include <QRect>

myGraph::myGraph(QObject *parent) : QGraphicsScene(parent)
{

}
void myGraph::drawBackground(QPainter *painter, const QRectF &rect)
{
    Q_UNUSED(rect);
    QPen pen;
    pen.setColor(QColor(60,60,60));
    pen.setWidth(1);
    painter->setPen(pen);
    qreal left=rect.left();
    for(int i=left;i<2068;i+=10)
    {
        painter->drawLine(left,i,2068,i);
    }
    for(int i=left;i<2068;i+=10)
    {
        painter->drawLine(i,left,i,2068);
    }
}
// 主窗口
#include "mymainwindow.h"
#include "ui_mymainwindow.h"
#include "mygraph.h"

MyMainWindow::MyMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MyMainWindow)
{
    ui->setupUi(this);
    myGraph *ne=new myGraph;

但在主函数不知道还有一层关系,于是发现连类的画背景重写函数都没有进。尴尬。。。
2.接下来在各种论坛里面找相关的代码以及问题,但是发现可能是太简单了,连国内最大的Qt中文社区http://www.qtcn.org都没有这个问题。还好在强大的C站找到了一些方向,说是Qt 教程书里面是有相关内容的。赶紧去看了相关的文件

图形的三元素关系

在这里插入图片描述

图形的坐标关系

在这里插入图片描述
总结来说就是QGraphicsScene需要创建一个对象,然后要添加到其父类QGraphicsView中进行显示,以及起始的坐标关系和Qt的默认关系是不一样的。还有就是显示的窗口大小也需要父类QGraphicsView进行设定。于是,完善了下主函数代码.

// An highlighted block
#include "mymainwindow.h"
#include "ui_mymainwindow.h"
#include "mygraph.h"

MyMainWindow::MyMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MyMainWindow)
{
    ui->setupUi(this);
    myGraph *ne=new myGraph(this);
    ne->setSceneRect(QRect(0,0,200,200));

    QGraphicsView *view=new QGraphicsView(this);
    view->setScene(ne);
    view->resize(this->width(),this->height());
    view->show();

}

MyMainWindow::~MyMainWindow()
{
    delete ui;
}

背景修饰图

最后

对于基础知识还是要靠书上,这一点今天真是体会过深。一个bug调一天,结束。
那么最后,希望能够帮到像我一样的萌新,那这几百字就算有价值了。
;