昨天我一朋友看了我的文章,和我说了一句:你这样写文章,不深入!哎呀,这句话把我说的那可这是有点杯具啊!不过,说得好,一句挫中了我写文章的缺点,最后我只想说一句:说的好!好吧,吸取教训,以后的文章争取给大家说的详细一些,毕竟我现在还是一个大二的学生,能力有限,还望大家谅解,不过我会尽力把我知道的东西,尽量的抖出来!
好了,又说了定废话,进入主题吧。今天咱说说QT的2D绘图。这就说到QT的一个类QPainter了。QPainter可以绘制从简单的直线到像饼图和弦这样的复杂形状。它也可以绘制排列的文本和像素映射。大概有个这样的理解就行了,对于一个初学者来说。另外,如果大家想具体了解一下的话,查一下API就OK了!
绘图工具的典型用法:1、构造一个绘图工具。2、设置画笔和画刷等。3、绘制。4、销毁这个绘图工具。
接下来咱做一个实例吧,怎么用QPainter这个类画一些简单的东西。
首先定义一个组件:
class PaintedWidget :public QWidget
{
public:
PaintedWidget();
protected:
void paintEvent(QPaintEvent *event);
};
然后在构造函数中定义一下PaintedWidget的大小和title,没什么好说的:
PaintedWidget::PaintedWidget()
{
resize(800,600);
setWindowTitle(tr("PaintDemo"));
}
接下来就是来实现paintEvent函数了:
void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(80,100, 650, 500);
painter.setPen(Qt::red);
painter.drawRect(10,10, 100, 400);
painter.setPen(QPen(Qt::green,5));
painter.setBrush(Qt::blue);
painter.drawEllipse(50,150, 400, 200);
}
加上主函数:
int main(int argc,char *argv[])
{
QApplicationapp(argc, argv);
PaintedWidget w;
w.show();
return app.exec();
}
然后看看把这些东西连起来的代码吧:
#include <QApplication>
#include <QWidget>
#include <QPen>
#include <QPainter>
class PaintedWidget : public QWidget
{
public:
PaintedWidget();
protected:
void paintEvent(QPaintEvent *event);
};
PaintedWidget::PaintedWidget()
{
resize(800,600);
setWindowTitle(tr("Paint Demo"));
}
void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(80, 100, 650, 500);
painter.setPen(Qt::red);
painter.drawRect(10, 10, 100, 400);
painter.setPen(QPen(Qt::green, 5));
painter.setBrush(Qt::blue);
painter.drawEllipse(50, 150, 400, 200);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
PaintedWidget w;
w.show();
return app.exec();
}
运行的效果如下: