第一次发QT的博文,本人对QT接触没多久,还在入门水平,大牛勿喷哈,之前因为C#  (.net framework)做出来的绘制矩形的程序闪的太厉害了,现在用QT重做一个

先上效果图


代码贴全了

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPalette>
#include<Qstring>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置背景色为白色
    QPalette palette(this->palette());
    palette.setColor(QPalette::Background, Qt::white);
    this->setPalette(palette);
    //初始化变量
    this->mousedown=false;
    this->release=false;
    ;
    ;
    //初始化画布
    pix=new QPixmap(w,h);
    pix->fill(Qt::white);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::paintEvent(QPaintEvent *event)
{

    QPainter paintpix(pix);
    QPainter paintform(this);
    if(this->mousedown)//鼠标移动时触发
    {
        paintform.drawPixmap(,,w,h,*pix);
        QRect* rect=new QRect(this->startpoint,this->endpoint);
        paintform.drawRect (*rect);

    }
    else if(!this->mousedown&&this->release)//鼠标释放时触发
    {
        if(this->startpoint.x()==this->endpoint.x()&&this->endpoint.y()==this->startpoint.y())//两点重合时什么也不画
        {
             paintform.drawPixmap(,,w,h,*pix);
            return;
        }

        QRect* rect=new QRect(this->startpoint,this->endpoint);
        paintpix.drawRect (*rect);
         paintform.drawPixmap(,,w,h,*pix);
        this->release=false;
    }
    else
    {
        paintform.drawPixmap(,,w,h,*pix);
    }

}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    if(this->mousedown)
    {
        this->endpoint=event->pos();
        update();
    }

}

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    startpoint=event->pos();
    this->mousedown=true;

}

void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    this->endpoint=event->pos();
    this->mousedown=false;
    this->release=true;
    update();
}

void MainWindow::repaint()//重画时
{
    QPainter paintform(this);
    paintform.drawPixmap(,,w,h,*pix);
}

示例代码链接::http://pan.baidu.com/s/1eQ2TaJw

这个是C#版本的 http://www.cnblogs.com/magicianlyx/p/4979644.html

QT画矩形的更多相关文章

  1. QT第六天学习

    基本事件: 鼠标事件 键盘事件 绘制事件 1.QT中的事件: 事件是对各应用程序需要知道的由应用程序内部或外部产生的事情或动作的通称. QT中事件的处理: 在QT中使用一个对象来表示一个事件,继承自Q ...

  2. 界面编程之QT绘图和绘图设备20180728

    /*******************************************************************************************/ 一.绘图 整 ...

  3. QT学习笔记3:QT中语法说明

    一.Qt 类中Q_OBJECT的作用 QObject 是所有Qt对象的基类. QObject 是Qt模块的核心.它的最主要特征是关于对象间无缝通信的机制:信号与槽.使用connect()建立信号到槽的 ...

  4. Qt绘图

    Qt绘图的设置 QPainter::Antialiasing // 反锯齿 QPainter::TextAntialiasing // 文字反锯齿 QPainter::SmoothPixmapTran ...

  5. Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)

    QPainter绘图 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状态改变 绘图设备(QPixmap,QImage,QBitmap,QPict ...

  6. 32.QT绘图

    widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPainter> #inclu ...

  7. Qt如何绘制(简单深刻,fearlazy的系列文章)

    我觉得绘制只需要考虑几个问题.简单地说就是谁在什么地方画什么? 在Qt中可以这么回答:QPainter在QPainterDevice中画想画的东西. 举个例子:用QtCreator向导新建一个项目,基 ...

  8. Qt 绘图(QBitmap,QPixmap,QImage,QPicture)

    QPainter绘图绘图设备(QPixmap,QImage,QBitmap,QPicture) 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状 ...

  9. QT内省机制、自定义Model、数据库

    本文将介绍自定义Model过程中数据库数据源的获取方法,我使用过以下三种方式获取数据库数据源: 创建 存储对应数据库所有字段的 结构体,将结构体置于容器中返回,然后根据索引值(QModelIndex) ...

随机推荐

  1. android Bluetooth-蓝牙

    bluetooth 一.开启蓝牙 1.获取BluetoothAdapter BluetoothAdapter.getDefaultAdapter() 2.判断手机设备是否 有蓝牙模块 3.开启蓝牙设备 ...

  2. 【BZOJ4435】[Cerc2015]Juice Junctions Tarjan+hash

    [BZOJ4435][Cerc2015]Juice Junctions Description 你被雇佣升级一个旧果汁加工厂的橙汁运输系统.系统有管道和节点构成.每条管道都是双向的,且每条管道的流量都 ...

  3. Swift 学习笔记 (继承)

    一个类可以从另一个类继承方法.属性和其他的特性.当一个类从另一个类继承的时候,继承的类就是所谓的子类,而这个类继承的类被称为父类. 在 Swift 中类可以调用和访问属于它们父类的方法.属性和下标脚本 ...

  4. Linux就该这么学--Shell脚本基本应用

    1.接收用户的参数: Shell脚本为了能够让用户更灵活的完成工作需求,可以在执行命令时传递参数:(命令名 参数1 参数2...) Shell预定义变量: $0 当前执行Shell脚本的程序名 $1- ...

  5. API的理解和使用——字符串的命令

    字符串的命令复习表 命令 作用 set   setex   setnx   get   mset   mget   incr   decs   incrby   decrby   incrbyfloa ...

  6. 使用urllib2打开网页的三种方法(Python2)

    python2才有urllib2模块,python3把urllib和urllib2封装成了urllib模块 使用urllib2打开网页的三种方法 #coding:utf-8 import urllib ...

  7. LeetCode:分发饼干【455】

    LeetCode:分发饼干[455] 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的 ...

  8. 微信小程序开发:学习笔记[1]——Hello World

    微信小程序开发:学习笔记[1]——Hello World 快速开始 1.前往微信公众平台下载微信开发者工具. 地址:https://mp.weixin.qq.com/debug/wxadoc/dev/ ...

  9. Step 0: 安装及启动

    一.Setting up a Single Node Cluster: http://hadoop.apache.org/docs/r2.6.5/hadoop-project-dist/hadoop- ...

  10. Python网络编程--Echo服务

    Python网络编程--Echo服务 学习网络编程必须要练习的三个小项目就是Echo服务,Chat服务和Proxy服务.在接下来的几篇文章会详细介绍. 今天就来介绍Echo服务,Echo服务是最基本的 ...