Qt中使用QGraphicsScene重写drawBackGround绘制背景
需求解释
我是想这学习Qt的界面设计,希望能够对界面背景进行优化然后使用Qt的界面与图形画背景网格。
首先查资料
- 通过查找博客发现很简单,就是新建一个类继承于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调一天,结束。
那么最后,希望能够帮到像我一样的萌新,那这几百字就算有价值了。


















