利用QT中Qpainter画点,直线,弧线等简单图形

  1. MyImgTest.h:
  2. #ifndef MYIMGTEST_H
  3. #define MYIMGTEST_H
  4. #include <QWidget>
  5. class MyImgTest : public QWidget
  6. {
  7. //Q_OBJECT
  8. public:
  9. MyImgTest(QWidget* parent = 0);
  10. ~MyImgTest();
  11. void paintEvent(QPaintEvent *);
  12. };
  13. #endif
  1. MyImgTest.cpp:
  2. #include "MyImgTest.h"
  3. #include <QPainter>
  4. //#include <QRect>
  5. //#include <QPointF>
  6. //#include <QLineF>
  7. MyImgTest::MyImgTest(QWidget* parent) : QWidget(parent)
  8. {
  9. setFixedSize(360,360); //固定大小
  10. setWindowTitle("Hello DevDiv!");
  11. }
  12. MyImgTest::~MyImgTest()
  13. {
  14. }
  15. void MyImgTest::paintEvent(QPaintEvent *)
  16. {
  17. // 画一条直线
  18. QPainter painter(this); // 创建QPainter一个对象
  19. QPen pen;
  20. //pen.setStyle(Qt::DashLine);
  21. pen.setColor(Qt::red); // 设置画笔为黄色
  22. painter.setPen(pen); // 设置画笔
  23. painter.drawLine(rect().topLeft(), rect().bottomRight());
  24. // 画一个空心矩形
  25. pen.setColor(Qt::darkRed);
  26. painter.setPen(pen);
  27. painter.drawRect(1, 1, 100, 100); //painter.drawRect(QRect(1, 1, 100, 100));
  28. // 画一个实心矩形
  29. QBrush bruch(Qt::FDiagPattern); // 画刷
  30. painter.setBrush(bruch); // 设置画刷
  31. painter.drawRect(QRect(105, 1, 100, 100));
  32. // 画一个多点线
  33. pen.setColor(Qt::black);
  34. painter.setPen(pen);
  35. bruch.setStyle(Qt::NoBrush); // 将画刷设置成null//fow what
  36. painter.setBrush(bruch);
  37. static const QPointF points[4] = {QPointF(210.0, 1), QPointF(220.0, 50.3), QPointF(300, 100.4), QPointF(260.4, 120.0)};
  38. painter.drawPolyline(points, 4);
  39. // 画多个点
  40. QPointF pointf[10];
  41. for (int i=0; i<10; ++i)
  42. {
  43. pointf[i].setX(2.0+i*10.0);
  44. pointf[i].setY(130.0);
  45. }
  46. painter.drawPoints(pointf, 10);
  47. // 画多条线
  48. QLineF linef[5];
  49. for (int j=0; j<5; ++j)
  50. {
  51. linef[j].setP1(QPointF(110.9+j*10, 120.0));
  52. linef[j].setP2(QPointF(120.8+j*12, 200.0));
  53. }
  54. painter.drawLines(linef, 5);
  55. // 画一个多边形
  56. QPolygonF polygon;
  57. polygon << QPointF(200.0, 120.0) << QPointF(230.0, 130.0) << QPointF(260.0, 180.0) << QPointF(200.0, 200.0);
  58. bruch.setStyle(Qt::CrossPattern);
  59. painter.setBrush(bruch);
  60. painter.drawPolygon(polygon, Qt::WindingFill);
  61. // 画一个圆角矩形
  62. QRectF rectangle(290.0, 110.0, 50, 50);
  63. bruch.setStyle(Qt::SolidPattern);
  64. painter.setBrush(bruch);
  65. painter.drawRoundedRect(rectangle, 20.0, 15.0);
  66. // 画一个QString
  67. painter.drawText(50, 300, "Hello DevDiv!");
  68. }
  1. main.cpp:
  2. #include <QApplication>
  3. #include "MyImgTest.h"
  4. int main(int argc,char *argv[])
  5. {
  6. QApplication app(argc,argv);
  7. MyImgTest* widget = new MyImgTest();
  8. widget->show();
  9. return app.exec();
  10. }
  11. 操作步骤:
  12. 1.qmake-qt4 -project
  13. 2.qmake-qt4
  14. 3.make

来自为知笔记(Wiz)

利用QT中Qpainter画点,直线,弧线等简单图形

时间: 2024-11-06 09:46:56

利用QT中Qpainter画点,直线,弧线等简单图形的相关文章

qt 中画线时如何设置笔的颜色和填充

在上一次介绍中已经实现了自定义控件,并把Widget 放入了主界面中,画了一个圆,具体可参考"QT 自定义窗口" 下面我们介绍一下如何设置画笔颜色和所画图形的填充颜色. 画笔颜色: void CircleWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); //painter.setBrush(QBrush(QColor(0x00,0xFF,0x00))); //painter.drawEllipse(QPoi

Qt中绘图坐标QPainter,Viewport与Window的关系

在Qt中常常要自己重载一些paintEvent函数,这个时候往往忽略了两个很关键的API,那就是setViewport和setWindow. Viewport,顾名思义,反应的是物理坐标,就是你实际想在当前坐标系下哪块区域画图,比如(50,50,100,100)的一个rect. Window而是逻辑坐标,你可以设置它从(0,0)开始,这样你可以setViewport(m_rect)之后,setWindow(0, 0, m_rect.width(), m_rect.height())来重新把物理坐

Qt中图像的显示与基本操作

Qt可显示基本的图像类型,利用QImage.QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放.旋转). 1. Qt可显示的图像类型 参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP.GIF.JPG.JPEG.PNG.TIFF.PBM.PGM.PPM.XBM.XPM. 2. Qt用如何显示图像 通常用QLabel显示图像,QLabel类有setPixmap()函数,可以用来显示图像.也可以直接用QPainter画出图像. 如果图像过大,直接用QL

Qt中截图功能的实现

提要 需求:加载一张图片并显示,可以放大缩小,可以截取图片的某个矩形并保存. 原以为蛮简单的一个功能,其实还是有点小复杂. 最简单Qt图片浏览器可以参考Qt自带的Demo:Image Viewer Example 看一下最终的实现效果: 图片的加载显示 这里需要实现一个QImageViewer的类,继承自QWidget. 图片用QPixmap来加载和显示,还有三个成员分别是图片的缩放因子,图片是否已经加载,viewer是否已经初始化,是否处于裁剪状态. private: QPixmap m_pi

WebGl 利用drawArrays、drawElements画三角形

效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WebGl 利用drawArrays.drawElements画三角形</title> </head> <body> <canvas id="myCanvas" width="500

Qt中单例模式的实现(4种方法)

最简单的写法: 12345 static MyClass* MyClass::Instance(){ static MyClass inst; return &inst;} 过去很长一段时间一直都这么写,简单粗暴有效.但是直接声明静态对象会使编译出的可执行文件增大,也有可能出现其他的一些问题,所以利用了Qt自带的智能指针QScopedPointer和线程锁QMutex,改成了需要时才动态初始化的模式: 12345678910111213 static MyClass* MyClass::Inst

[转]Qt中ui文件的使用

用designer设计的*.ui文件可以通过uic工具转换为*.h文件(在编译时也会自动生成这样一个ui_*.h文件),有了这个.h文件就可以直接按照纯C++的方式对其中的类进行调用.ui文件的使用就是利用默认工具uic自动产生一个类,然后用该类的setui函数加载界面到相应的对象上.       .ui文件的使用有三种形式:第一种是直接使用,第二种是定义一个新类,声明一个ui子对象,利用该对象来加载界面,第三种是将ui作为基类派生新的类. 借用一个例程分析如下: 工程及界面          

TTF字体基本知识及其在QT中的应用

字体类型 以Windows为例,有4种字体技术: Raster:光栅型,就是用位图来绘制字形(glyph),每个字都以位图形式保存 Vector:矢量型,就是用一系列直线的结束点来表示字形 TrueType:使用一系列直线.曲线和一些提示(hint)命令来绘制字形 Microsoft OpenType:与TrueType一致 因为TrueType等字体的hint能够调节只想的长度和曲线的形状,所以,它能够在不同大小的字体中表现良好.而Raster字体则是跟设备具体分辨率相关,而Vector字体则

Qt中显示复杂列表

提要 最近想要完成的一个项目需要显示一个列表,可以动态增减,可编辑,有checkbox.类似于这样 或者这样 但网上的例子都是这样 和这样 ... 最后实现的效果: QListWidget解决方案 在Android实现这样的列表是非常简单的,首先定义布局XML,然后再定义一个Adapter就可以了. Qt中类似的解决方案就是QListWidget. 自定义一个Widget类作为Item,比如 class UsersListItem : public QWidget { Q_OBJECT publ