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调一天,结束。
那么最后,希望能够帮到像我一样的萌新,那这几百字就算有价值了。