原来Qt也可以绘制图形啊。
利用QPainter类来绘制,再辅以其他类,诸如QPen来说明绘制的画笔,QPoint来说明某个点,QPaletee来说明绘制的颜料等等。在QWidget类中来实现虚拟函数oid
paintEvent(QPaintEvent
*)。当调用这个QWidget时,来自动调用绘制函数。将图形更新到QWidget上。
下面先写段简短的程序来说明下:
//----------------------------------------------------------
//在void
layoutWidget::paintEvent(QPaintEvent *)中实现
//(我自己建的类叫layoutWidget类,继承自 QWidget类)
void
LayoutWidget::paintEvent(QPaintEvent *)
{
painter=new QPainter;
painter->begin(this); drawBox(xLength,yLength); //绘制一个矩形(长:xLength,宽:yLength)
drawTarget(x0,y0,painter); //绘制一个圆形(圆心(x0,y0),半径:r(程序中设置))
painter->end(); delete painter;
}
------------------------------------------------
//绘制矩形drawBox()
void
LayoutWidget::drawBox(int width,int length)
{
painter->setBrush(QBrush(Qt::darkGreen,Qt::SolidPattern));
//设置画刷形式
painter->drawRect(xOff,yOff,width,length); //xOff和yOff是距离widget的左上角的像素
}
//drawRect()函数的应用
----------------------------------------------------------------------
//绘制圆形drawTarget() 此为绘制两个同心圆的程序
void
LayoutWidget::drawTarget(int x0,int y0,QPainter *painter)
{
QPoint
point(x0,y0); //圆心
QPalette palette;
painter->setBrush(QBrush(Qt::gray,Qt::SolidPattern));
//设置画刷形式
painter->drawEllipse(point,r1,r1); //画大圆
painter->setBrush(QBrush(palette.brush(QPalette::Background)));
//设置画刷为背景色
painter->drawEllipse(point,r2,r2); //画小圆
}
//drawEllipse()函数的应用,这个函数有多个重载函数,翻来覆去,还是
//把QPoint作为其中一个参数较好,较方便,这个点即为圆形的圆心。其
//他的重载函数还需计算下到Widget左上角的像素,个人觉得有点麻烦。
----------------------------------------------------
//另外,炫耀下我的发现,如何获取窗口的背景颜色?我可是费了好大一番功夫。找到QPaletee
// 类,然后用它的枚举enum ColorRole{Window,Background,WindowText,...,NoRole}
//还有函数const QBrush &bursh(ColorRole
role) const
//所以才有了painter->setBrush(QBrush(palette.brush(QPalette::Background)));
//设置画刷为背景色
这样的调用
真的觉得我很天才啊,哈哈
另外,如何获取窗口的大小?
直接this->width(),this->height()即可获得窗口的宽度和高度