Qt学习第十天

QPainter 绘图

  1. 绘图事件 void paintEvent()
  2. 声明一个画家对象 QPainter painter(this) this指定绘图设备
  3. 画线,画圆,画矩形,画文字
  4. 设置画笔QPen 设置画笔宽度、风格
  5. 设置画刷QBrush 设置画刷 风格
    //绘图事件
    void Widget::paintEvent(QPaintEvent *){
    
        //实例化画家对象  this指定的是绘图的设备
        QPainter painter(this);
    
        //设置画笔
        QPen pen(QColor(255,0,0));
        //设置画笔宽度
        pen.setWidth(3);
        //设置画笔风格
        pen.setStyle(Qt::DotLine);
        //让画家 使用这个笔
        painter.setPen(pen);
    
        //设置画刷
        QBrush brush(Qt::cyan);
        //设置画刷风格
        brush.setStyle(Qt::Dense7Pattern);
        //让画家使用画刷
        painter.setBrush(brush);
    
        //画线
        painter.drawLine(QPoint(0,0),QPoint(100,100));
    
        //画圆
        painter.drawEllipse(QPoint(100,100),50,50);
    
        // 矩形
        painter.drawRect(QRect(20,20,50,50));
    
        //画文字
        painter.drawText(QRect(10,200,200,50),"好好学习,天天向上");
    
    

QPainter高级设置

  1. 抗锯齿 效率低 painter.setRenderHint(QPainter::Antialiasing);
  2. 对画家进行移动 painter.translate(100,0);
  3. 保存状态 save
  4. 还原状态 restore
  5. 如果想手动调用绘图事件 利用update
  6. 利用画家画图片 painterdrawPixmap(x,y,QPixmap(www))
  7. //高级设置
        QPainter painter(this);
        painter.drawEllipse(QPoint(100,50),50,50);
        //设置抗锯齿能力  效率较低
        painter.setRenderHint(QPainter::Antialiasing);
        painter.drawEllipse(QPoint(200,50),50,50);
    
        //画矩形
        painter.drawRect(QRect(20,20,50,50));
    
        //移动画家
        painter.translate(100,0);
    
        //保存画家状态
        painter.save();
    
        painter.drawRect(QRect(20,20,50,50));
    
        painter.translate(100,0);
    
        //还原画家保存状态
        painter.restore();
    
        painter.drawRect(QRect(20,20,50,50));
    
    //利用画家画资源图片
        QPainter painter(this);
    
        posX+=20;
    
        //如果超出了屏幕 从0开始
        if(posX > this->width())
        {
            posX = 0;
        }
    
        painter.drawPixmap(posX,0,QPixmap(":/图标/www.png"));
    

     

QPaintDevice绘图设备

  1. QPixmap QImage QBitmap(黑白色) QPicture QWidget
  2. QPixmap 对不同平台做了显示优化
  • QPixmap pix(300,300)
  • Pix.fill(填充颜色)
  • 利用画家往 pix 上画画 QPainter painter(& pix)
  • 保存 pix.save(“路径”)
  1. QImage 可以对像素进行访问
  • 使用和QPixmap差不多 QImage img(300,300,QImage::Format_RGB32);
  • 其他流程和QPixmap一样
  • 可以对像素进行修改img.setPixel(i,j,value);
  1. QPicture 记录和重现绘图指令
  • QPicture pic
  • painter.begin(&pic);
  • 保存 pic.save(任意后缀名)
  • 利用 画家 重现 painter.drawPicture(0,0,pic);
  1. //Pixmap绘图设备  专门为平台做了显示的优化
        QPixmap pix(300,300);
    
        //填充颜色
        pix.fill(Qt::white);
    
        //声明画家
        QPainter painter(&pix);
        painter.setPen(QPen(Qt::green));
        painter.drawEllipse(QPoint(150,150),100,100);
    
        //保存
        pix.save("E:\\pix.png");

     

    //QImage绘图设备  可以对像素进行访问
        QImage img(300,300,QImage::Format_RGB32);
        img.fill(Qt::white);
    
        QPainter painter(&img);
        painter.setPen(QPen(Qt::blue));
        painter.drawEllipse(QPoint(150,150),100,100);
    
        //保存
        img.save("E:\\img.png");
    
    //绘图事件
    void Widget::paintEvent(QPaintEvent *)
    {
        QPainter painter(this);
    
       //利用QImage 对像素进行修改
        QImage img;
        img.load(":/图标/www.png");
    
        //修改像素点
        for(int i = 50; i<100; i++){
            for (int j = 50;j < 100; j++) {
                QRgb value = qRgb(255,0,0);
               img.setPixel(i,j,value);
            }
        }
    
        painter.drawImage(0,0,img);
    
    }
    //QPicture 绘图设备 可以记录和重现绘图指令
        QPicture pic;
        QPainter painter;
        painter.begin(&pic); //开始往pic上画
        painter.setPen(QPen(Qt::cyan));
        painter.drawEllipse(QPoint(150,150),100,100);
        painter.end();  //结束画画
    
        //保存磁盘
        pic.save("E:\\pic.zt");
    
    QPainter painter(this);
        //重现QPicture绘图指令
        QPicture pic;
        pic.load("E:\\pic.zt");
        painter.drawPicture(0,0,pic);

QFile对文件进行读写操作

  1. QFile进行读写操作
  2. QFile file(path 文件路径)
  • file.open(打开方式) QIODevice::ReadOnly
  • 全部读取 file.readAll()  按行读 file.readLine()   attend() 判断是否读到文件尾
  • 默认支持编码格式 utf-8
  • 利用编码格式类指定格式 QTextCodec * codec = QTextCodec::codecForName("gbk");
  • ui->textEdit->setText(codec->toUnicode(array));
  • 文件对象关闭close

    4.写

  • file.open(QIODevice::Append);  //用追加的方式写
  • file.write(“内容”)
  • file.close 关闭
    //点击读取文件按钮 弹出文件对话框
        connect(ui->pushButton,&QPushButton::clicked,[=](){
            QString path = QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\asus\\Desktop");
            //将路径放入到lineEdit中
            ui->lineEdit->setText(path);
    
            //编码格式类
            //QTextCodec * codec = QTextCodec::codecForName("gbk");
    
            //读取内容 放到 textEdit中
            //QFile默认支持的格式是utf-8
            QFile file(path); //参数就是读取文件的路径
            //设置打开方式
            file.open(QIODevice::ReadOnly);
    
            //QByteArray array = file.readAll();
    
            QByteArray array;
            while(!file.atEnd()){
                array +=file.readLine();
            }
            //array = file.readLine();//按行读
    
            //将读取到的数据 放入textEdit中
            ui->textEdit->setText(array);
            //ui->textEdit->setText(codec->toUnicode(array));
    
            //对文件对象进行关闭
            file.close();
    
            //进行写文件
            file.open(QIODevice::Append);  //用追加的方式写
            file.write("啊啊啊啊");
            file.close();
    
    
    
        });
    }

QFileInfo 读取文件信息

  • QFileInfo info(路径)
  • qDebug() << "大小:" <<info.size() << "后缀名:" << info.suffix() << "文件名称" << info.filePath();
  • qDebug() << "创建日期" << info.created().toString("yyyy/MM/dd hh:mm:ss");
  • qDebug() << "最后修改日期:" << info.lastModified().toString("yyyy/MM/dd hh:mm:ss");
  •  

    //QFileInfo 文件信息类
            QFileInfo info(path);
            qDebug() << "大小:" <<info.size() << "后缀名:" << info.suffix() << "文件名称" << info.filePath();
            qDebug() << "创建日期" << info.created().toString("yyyy/MM/dd hh:mm:ss");
            qDebug() << "最后修改日期:" << info.lastModified().toString("yyyy/MM/dd hh:mm:ss");
    
    

     

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值