一.第一阶段


设置线条粗细

二.第二阶段:设置笔的样式


如:虚线

三.第三阶段:绘制矩形

四.第四阶段:设置颜色

轮廓颜色

笔刷颜色

笔刷样式

五.第五阶段:绘制其他形状图像和文字

六.第六阶段:图像旋转

七.第七阶段:图像缩放

八.第八阶段:坐标系原点变换


尽管painter的原点坐标系变换了,但不会影响顶级窗口的原点坐标系。

九.第九阶段:画笔的保存和还原

注意:使用QPinter在QWidget派生类对象上绘制图形时,QPainter必须放在paintEvent事件处理函数里面绘制。

十.附代码:

xiaowen_QT_day24.pro

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.h# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);void paintEvent(QPaintEvent *event);~Widget();
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include<QDebug>
#include<QPainter>
#include<QPushButton>
Widget::Widget(QWidget *parent): QWidget(parent)
{auto *pb=new QPushButton(this);pb->move(100,100);}
#if 0
void Widget::paintEvent(QPaintEvent *)
{static int i=0;qDebug()<<__FUNCTION__<<i++<<endl;QPainter painter;painter.begin(this);/*画笔绘制轮廓*///painter.setPen(QPen(Qt::red,10,Qt::DashLine));painter.setPen(QPen(Qt::red));/*笔刷填充颜色*/painter.setBrush(QBrush(Qt::blue));//painter.setBrush(QBrush(Qt::blue,Qt::Dense1Pattern));painter.drawLine(0,0,100,100);painter.drawRect(100,100,100,200);painter.drawEllipse(200,200,100,200);painter.drawText(100,100,"你一定要主动!");painter.end();
}
#endif
void Widget::paintEvent(QPaintEvent *)
{QPainter painter;painter.begin(this);painter.setPen(Qt::red);painter.setBrush(Qt::red);painter.drawRect(100,100,100,100);painter.save();painter.setPen(Qt::blue);painter.setBrush(QBrush(Qt::blue));painter.drawRect(200,100,100,100);painter.restore();painter.drawRect(300,100,100,100);painter.end();
}
Widget::~Widget()
{}

main.cpp

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

QT每日一练day24:绘画事件相关推荐

  1. QT每日一练day4:ubuntu中使用QT

    (本文主要是为了说明QT的跨平台特性)   一.安装QT sudo apt-get install qt5-default qtcreator cmake 二.打开QT 可以点击图标或命令行方式: 三 ...

  2. QT每日一练day1:第一个程序

    参考博文:Qt常见类.窗口类继承关系树图 QT每日一练(1):第一个程序 最终效果(GIF动图): step1: step2: step3: step4: step5: step6: step7: s ...

  3. QT每日一练day25:触发绘画事件

    运行结果(GIF动图): widget.cpp 附代码: xiaowen_QT_day25.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT ...

  4. QT每日一练day22:键盘事件

    一.第一阶段--键盘按键按下事件 运行结果(GIF动图): xiaowen_QT_day22.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): Q ...

  5. QT每日一练day21:鼠标事件

    一.第一阶段--鼠标点击和释放事件 运行结果(GIF动图): MouseEvent.pro #------------------------------------------------- # # ...

  6. QT每日一练day23:鼠标进入与离开事件

    运行结果(GIF动图): xiaowen_QT_day23.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFI ...

  7. QT每日一练day20:事件处理机制

    运行结果: day20.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The fo ...

  8. QT每日一练day29:QT中的多线程探究

    一.未使用多线程,则w0先运行完后,w1才开始运行 运行结果(GIF动图): main.cpp xiaowen_QT_day29.pro QT+=widgets SOURCES += \main.cp ...

  9. QT每日一练day27:绘制不规则窗体

    注:本文本来应该是以一个不规则的图片作为历程的,,忘记了!!!!     一.第一阶段:隐藏窗体框架 运行结果(GIF动图): widget.cpp 二.第二阶段:将窗口设置为透明 运行结果(GIF动 ...

最新文章

  1. 第七章 ReentrantLock总结
  2. java内部类的定义原则
  3. Apache POI读取Excel
  4. 精读《图解HTTP》
  5. 讯飞输入法将深度神经网络DNN技术应用于语音识别达到业界领先水平
  6. new对象后的代码块(匿名类)
  7. db.serverStatus()
  8. 双击ctrl搜索 意在颠覆用户的习惯
  9. 用Adobe Flex3开发AIR应用程序–入门指南
  10. python在煤矿的用途-息烽高校邦数据科学通识课【Python爬虫】答案
  11. 腾讯企业邮箱申请步骤
  12. 主频不同的服务器性能差异,0.2GHz主频差距可有可无?E3处理器实测
  13. Calander 类的使用
  14. 实验报告:定义一个名为MyRectangle的矩形类,完成如下要求
  15. android内存最小版本下载,猫和老鼠精简版下载-猫和老鼠内存最小版下载v6.6.1 安卓版-芒果手游网...
  16. 大型企业集团网络与信息安全保密总体方案及策略
  17. media-有声小说工作流详解
  18. 长期稳定短视频去水印微信小程序源码
  19. 快速集成华为AGC云存储服务-Web
  20. 海康威视网络监控摄像头常见设置-工作随笔

热门文章

  1. java 类和对象的理解
  2. 基于javaweb+jsp+mysql的美容院管理系统
  3. 基于JAVA+SpringBoot+Mybatis+MYSQL的科研项目评审系统
  4. python 内存溢出能捕获吗_Python内存泄漏和内存溢出的解决方案
  5. Activity 启动模式
  6. jqGrid 使用案例及笔记
  7. docker删除为none的镜像
  8. 初识多线程之基础知识与常用方法
  9. dingding post POST请求
  10. Codeforces Round #243 (Div. 2) A~C