qt绘制一圈圆_Qt绘制圆形,矩形等图形 绘制同心圆
原來(lái)Qt也可以繪制圖形啊。
利用QPainter類(lèi)來(lái)繪制,再輔以其他類(lèi),諸如QPen來(lái)說(shuō)明繪制的畫(huà)筆,QPoint來(lái)說(shuō)明某個(gè)點(diǎn),QPaletee來(lái)說(shuō)明繪制的顏料等等。在QWidget類(lèi)中來(lái)實(shí)現(xiàn)虛擬函數(shù)oid
paintEvent(QPaintEvent
*)。當(dāng)調(diào)用這個(gè)QWidget時(shí),來(lái)自動(dòng)調(diào)用繪制函數(shù)。將圖形更新到QWidget上。
下面先寫(xiě)段簡(jiǎn)短的程序來(lái)說(shuō)明下:
//----------------------------------------------------------
//在void
layoutWidget::paintEvent(QPaintEvent *)中實(shí)現(xiàn)
//(我自己建的類(lèi)叫l(wèi)ayoutWidget類(lèi),繼承自 QWidget類(lèi))
void
LayoutWidget::paintEvent(QPaintEvent *)
{
painter=new QPainter;
painter->begin(this);?drawBox(xLength,yLength);?//繪制一個(gè)矩形(長(zhǎng):xLength,寬:yLength)
drawTarget(x0,y0,painter);?//繪制一個(gè)圓形(圓心(x0,y0),半徑:r(程序中設(shè)置))
painter->end(); ?delete painter;
}
------------------------------------------------
//繪制矩形drawBox()
void
LayoutWidget::drawBox(int width,int length)
{
painter->setBrush(QBrush(Qt::darkGreen,Qt::SolidPattern));
//設(shè)置畫(huà)刷形式
painter->drawRect(xOff,yOff,width,length);?//xOff和yOff是距離widget的左上角的像素
}
//drawRect()函數(shù)的應(yīng)用
----------------------------------------------------------------------
//繪制圓形drawTarget()?此為繪制兩個(gè)同心圓的程序
void
LayoutWidget::drawTarget(int x0,int y0,QPainter *painter)
{
QPoint
point(x0,y0);?//圓心
QPalette palette;
painter->setBrush(QBrush(Qt::gray,Qt::SolidPattern));
//設(shè)置畫(huà)刷形式
painter->drawEllipse(point,r1,r1);?//畫(huà)大圓
painter->setBrush(QBrush(palette.brush(QPalette::Background)));
//設(shè)置畫(huà)刷為背景色
painter->drawEllipse(point,r2,r2);?//畫(huà)小圓
}
//drawEllipse()函數(shù)的應(yīng)用,這個(gè)函數(shù)有多個(gè)重載函數(shù),翻來(lái)覆去,還是
//把QPoint作為其中一個(gè)參數(shù)較好,較方便,這個(gè)點(diǎn)即為圓形的圓心。其
//他的重載函數(shù)還需計(jì)算下到Widget左上角的像素,個(gè)人覺(jué)得有點(diǎn)麻煩。
----------------------------------------------------
//另外,炫耀下我的發(fā)現(xiàn),如何獲取窗口的背景顏色?我可是費(fèi)了好大一番功夫。找到QPaletee
//?類(lèi),然后用它的枚舉enum ColorRole{Window,Background,WindowText,...,NoRole}
//還有函數(shù)const QBrush &bursh(ColorRole
role) const
//所以才有了painter->setBrush(QBrush(palette.brush(QPalette::Background)));
//設(shè)置畫(huà)刷為背景色
這樣的調(diào)用
真的覺(jué)得我很天才啊,哈哈
另外,如何獲取窗口的大小?
直接this->width(),this->height()即可獲得窗口的寬度和高度
總結(jié)
以上是生活随笔為你收集整理的qt绘制一圈圆_Qt绘制圆形,矩形等图形 绘制同心圆的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: lisp正负调换_坐标提取lisp程序
- 下一篇: 短文件名漏洞如何修复_短文件名漏洞修复