一、環境介紹
QT版本: 5.12.6
作業系統: win10 64位
二、功能介紹
使用指定的圖檔作為QGraphicsView視圖視窗的背景,并消除圖元拖動時産生的殘影。
思路: 派生QGraphicsScene類,重寫drawBackground函數。

#include "my_graphicsScene.h"
my_graphicsScene::my_graphicsScene(QWidget *parent): QGraphicsScene(parent)
{
}
my_graphicsScene::~my_graphicsScene()
{
}
void my_graphicsScene::drawBackground(QPainter *painter, const QRectF &rect)
{
if(views().count()==0)return;
// 計算視窗的大小,消除圖元拖動時出現的殘影
QGraphicsView* pView=views().first();
QRect contentRect=pView->viewport()->contentsRect();
QRectF sceneRect =pView->mapToScene(contentRect).boundingRect();
//繪制指定圖檔作為背景
QPixmap pixmap("D:/linux-share-dir/test/www/123.jpg");
painter->drawPixmap(sceneRect,pixmap,QRect());
}
3.2 my_graphicsScene.h
#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QPainter>
#include <QPaintEvent>
#include <QMouseEvent>
#include <QPainterPath>
#include <QPixmap>
#include <QDebug>
class my_graphicsScene : public QGraphicsScene
{
Q_OBJECT
public:
my_graphicsScene(QWidget *parent = nullptr);
~my_graphicsScene();
protected:
void drawBackground(QPainter *painter, const QRectF &rect);
};
#endif // GRAPHICSSCENE_H
3.3 widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
scene= new my_graphicsScene; //設定畫闆
ui->graphicsView->setScene(scene); //設定場景
//設定圖元更新模式,當圖元發生改變時,更新整個視窗
ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
//重寫QGraphicsItem 可以設定文本的背景顔色
//富文本
textItem=new QGraphicsTextItem;
textItem->setPlainText("QGraphicsTextItem測試.");
textItem->setFont(QFont("華文琥珀",12));
textItem->setDefaultTextColor(Qt::red); //設定字型顔色
textItem->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);
scene->addItem(textItem);
}
/*
工程: graphicsView
日期: 2020-12-20
作者: DS小龍哥
環境: win10 QT5.12.6 MinGW32
功能: 析構函數
*/
Widget::~Widget()
{
delete ui;
}
/*
工程: graphicsView
日期: 2020-12-20
作者: DS小龍哥
環境: win10 QT5.12.6 MinGW32
功能: 編輯狀态
*/
void Widget::on_pushButton_clicked()
{
//設定編輯狀态
textItem->setTextInteractionFlags(Qt::TextEditorInteraction);
}
/*
工程: graphicsView
日期: 2020-12-20
作者: DS小龍哥
環境: win10 QT5.12.6 MinGW32
功能: 取消編輯狀态
*/
void Widget::on_pushButton_2_clicked()
{
textItem->setTextInteractionFlags(Qt::NoTextInteraction); //取消編輯狀态
//将QGraphicsTextItem上的文本實時顯示在plainTextEdit上.
ui->plainTextEdit->clear();
ui->plainTextEdit->insertPlainText(textItem->toPlainText());
}
/*
工程: graphicsView
日期: 2020-12-20
作者: DS小龍哥
環境: win10 QT5.12.6 MinGW32
功能: 選擇字型
*/
void Widget::on_pushButton_setfont_clicked()
{
bool ok;
QFont font=QFontDialog::getFont(&ok, QFont("幼圓", 12),this,tr("字型選擇"));
if(ok) //使用者點選的了确定按鈕
{
textItem->setFont(font); //設定目前字型
}
}
/*
工程: graphicsView
日期: 2020-12-20
作者: DS小龍哥
環境: win10 QT5.12.6 MinGW32
功能: 選擇顔色
*/
void Widget::on_pushButton_setcolor_clicked()
{
QColor clr=QColorDialog::getColor(Qt::white,this,tr("顔色選擇"));
if(clr.isValid())
{
textItem->setDefaultTextColor(clr);
}
}