真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

qt繪圖QPainter-創(chuàng)新互聯(lián)

QPainter繪圖系統(tǒng)

QPainter用來進行繪圖操作的類。繪圖設(shè)備一般包括Qwidget、Qpixmap、QImage.他們提供給QPainter畫布。
QPaintDevice是一個可以使用QPainter進行繪圖的抽象二維界面。
QPaintEngine給QPainter提供在不同設(shè)備上繪圖的接口,QPaintEngine類由QPainter和QPaintDevice內(nèi)部使用,應(yīng)用程序一般無需使用QPaintEngine。
繪圖設(shè)備包括QWidget、QPixmap、QImage等。
paintEvent世界和繪圖區(qū)
QWidget類及其子類是最常用的繪圖設(shè)備,從QWidget類繼承的類都有paintEvent()事件,只需要重定義此事件就行。??相當(dāng)于windows mfc的onpaint函數(shù)。

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的陸川網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

只要窗口部件需要被重繪就被調(diào)用。是repaint()或update()的結(jié)果。 幾次調(diào)用update()的結(jié)果通常僅僅是一次paintEvent()調(diào)用。 Qt通常在paintEvent()調(diào)用之前擦除這個窗口部件的區(qū)域。

update()相當(dāng)于 mfc 的invalidate();迫使paintEvent虛函數(shù)被調(diào)用。

QWidget繪圖區(qū)就是其窗口內(nèi)部區(qū)域。坐標(biāo)系統(tǒng)的單位是像素。左上角坐標(biāo)為(0,0)。這個坐標(biāo)系統(tǒng)是物理坐標(biāo),稱為視口(viewport)坐標(biāo)。

高度:QWidget::height()

寬度:QWidget::width()

設(shè)置qwidget窗口大小的函數(shù)

1.setMinimumSize? setMaximumSize

2.resize

3.setFixedSize

QPainter繪圖主要屬性

QPen:畫筆,用于控制線條的顏色、寬度等。? ?

setPen、setStyle(線條樣式)、setCapStyle(線條端點樣式)、setJoinStyle(線條連接樣式)

QBrush:畫刷,用于填充顏色、漸變特性等。

setBrush、setStyle(填充樣式)

漸變色:

線性漸變:QLinearGradient

輻射漸變:QRadialGradient

圓錐形漸變:QConicalGradient

//線性漸變
    QLinearGradient  linearGrad(0,0,100,0);//從左到右,
    linearGrad.setColorAt(0,Qt::yellow);//起點顏色
    linearGrad.setColorAt(1,Qt::green);//終點顏色
    linearGrad.setSpread(QGradient::PadSpread);  //展布模式
    painter.setBrush(linearGrad);

QFont:字體屬性,用于繪制文字時,設(shè)置文字的樣式、大小等?

setFont

繪圖

點:drawPoint()、drawPoints()、

線:drawLine()、

區(qū)域:drawRect()

文本:drawText()

Qt提供了處理圖像數(shù)據(jù)的類:QImage, QPixmap和QPicture。

  • QImage是為I/O和直接像素訪問和操作而設(shè)計和優(yōu)化的
  • QPixmap是為在屏幕上顯示圖像而設(shè)計和優(yōu)化的。
  • QPicture類是一個記錄和回放QPainter命令的繪制設(shè)備。

drawPicture: QPicture?

QPicture picture;
?QPainter painter;
?painter.begin(&picture); ? ? ? ? ? // paint in picture
?painter.drawEllipse(10,20, 80,70); // draw an ellipse
?painter.end(); ? ? ? ? ? ? ? ? ? ? // painting done
?picture.save("drawing.pic"); ? ? ? // save picture


QPicture picture;
QPainter painter;
picture.load("drawing.pic");
painter.begin(this);
painter.drawPicture(0,0,picture);
painter.end();

drawPixmap:? ?QPixmap

QPixmap繪圖依賴硬件,QPixmap的設(shè)計本來就是用來加速顯示,用paint繪圖時用QPixmap會比其他類的效果好很多。一般小圖片用QPixmap加載,和平臺相關(guān)(在不同的平臺可能繪制出的效果不一樣)。QPixmap上繪圖比較慢,但顯示它則比較快(使用GPU處理,相對減輕了CPU的負擔(dān)).

可以直接使用構(gòu)造函數(shù),關(guān)聯(lián)資源 ,如?QPixmap(":/res/python.jpg");也可以使用load、save進行加載或保存。

load()加載圖像文件作為QPixmap對象
save()將QPixmap對象保存為文件
QRect rect1(0,0,100,100);
    paint.drawPixmap(rect1,QPixmap(tr(":/res/about.png")));

drawImage? ?QImage

QImage類提供了一個獨立于硬件的圖像表示,它允許直接訪問像素數(shù)據(jù),并且可以用作繪制設(shè)備;適合加載大圖片;可以在線程中繪圖,可以優(yōu)化UI響應(yīng)時間。繪制圖片出來的效果和平臺無關(guān),QImage上繪圖比較快,但顯示它則比較慢。

QImage的基本函數(shù)的使用與QPixmap類似,可以直接使用構(gòu)造函數(shù),關(guān)聯(lián)資源

QRect rect2(100,0,100,100);
    paint.drawImage(rect2,QImage(tr(":/res/about.png")));

QPixmap與QImage的區(qū)別:

QPixmap依賴于硬件,QImage不依賴于硬件。

QPixmap主要是用于繪圖,針對屏幕顯示而最佳化設(shè)計,QImage主要是為圖像I/O、圖片訪問和像素修改而設(shè)計的。
當(dāng)圖片小的情況下,直接用QPixmap進行加載,畫圖時無所謂,當(dāng)圖片大的時候如果直接用QPixmap進行加載,會占很大的內(nèi)存,一般一張幾十K的圖片,用QPixmap加載進來會放大很多倍。

所以一般圖片大的情況下,用QImage進行加載,然后轉(zhuǎn)乘QPixmap用戶繪制。QPixmap繪制效果是最好的。

QImage image = pixmap.toImage();
QPixmap pixmap = QPixmap::fromImage(image);

坐標(biāo)平移:translate

坐標(biāo)旋轉(zhuǎn):rotate

縮放:scaled

狀態(tài)保存?save

狀態(tài)恢復(fù)?? ?restore

恢復(fù)所有操作: resetTransform

坐標(biāo)

物理坐標(biāo):

即視口坐標(biāo),setviewport? 默認(rèn)情況下,視口等于繪圖設(shè)備的整個矩形區(qū)。單位為像素、

邏輯坐標(biāo):

窗口坐標(biāo),中心為原點(0,0)setwindow? 如果想不用管實際物理坐標(biāo)范圍大小,可通過設(shè)置成窗口坐標(biāo)來繪圖。這是設(shè)備大小變化時,繪制的圖片也自動變化大小。

調(diào)用setwindow后,后面用到的坐標(biāo)都是按邏輯坐標(biāo)來算了的。是按比例縮放

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    QPainter    painter(this);

    int W=width();
    int H=height();

    int side=qMin(W,H);//去長和寬的小值
    QRect rect((W-side)/2, (H-side)/2,side,side); //viewport矩形區(qū)
    painter.drawRect(rect); //Viewport大小

    painter.setViewport(rect);//設(shè)置Viewport
    painter.setWindow(-100,-100,200,200); // 設(shè)置窗口大小,邏輯坐標(biāo)

    painter.setRenderHint(QPainter::Antialiasing);

//設(shè)置畫筆
    QPen    pen;
    pen.setWidth(1); //線寬
    pen.setColor(Qt::red); //劃線顏色
    //Qt::NoPen,Qt::SolidLine, Qt::DashLine, Qt::DotLine,Qt::DashDotLine,Qt::DashDotDotLine,Qt::CustomDashLine
    pen.setStyle(Qt::SolidLine);//線的類型,實線、虛線等
    //Qt::FlatCap, Qt::SquareCap,Qt::RoundCap
    pen.setCapStyle(Qt::FlatCap);//線端點樣式
    //Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin,Qt::SvgMiterJoin
    pen.setJoinStyle(Qt::BevelJoin);//線的連接點樣式
    painter.setPen(pen);

    painter.setCompositionMode(QPainter::CompositionMode_Difference);

    for(int i=0; i<36;i++)
    {
        painter.drawEllipse(QPoint(50,0),50,50);
        painter.rotate(10);
    }
}

裁剪區(qū)域? ?setClipRegion

延伸:設(shè)置widget的背景圖片的辦法

1.在paintEvent事件中繪制圖片

void Widget::paintEvent(QPaintEvent * ev)
{
	QPainter painter(this);
	painter.drawPixmap(rect(),QPixmap(":/bg.jpg"),QRect());
}

缺點就是要使用paintEvent事件需要新建一個類,不適合子窗口

2.使用調(diào)色板QPalette來設(shè)置圖片

QPalette pal =this->palette();
pal.setBrush(QPalette::Background,QBrush(QPixmap(":/bg.jpg")));
setPalette(pal);

3.使用樣式表(setStyleSheet)

setStyleSheet("border-image:url(:/bg.jpg)");

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


本文名稱:qt繪圖QPainter-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/csjigh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部