QT基础:做一个图片编辑器演示,UI中主要用到QScrollArea、QPuhButton、QSlider、QMenBar、QStatusBar、QGroupBox等控件

做一个图片编辑器的演示,其实也相当于 QScrollAreaQPuhButtonQSliderQMenBarQStatusBarQGroupBox 等控件的综合演示

主要实现功能:打开某路径图片可以在窗口中展示,如果图片大于展示区域,会自动出现滑动块,可以通过画笔和橡皮擦来修改图片,可以选择不同的画笔颜色,可以画笔大小,编辑完成后,可以保存图片,打开图片快捷键为 ctrl + o ,保存图片快捷键为: ctrl + s ;

完整代码:图片编辑器完整源码 0积分下载

1、打开QT,创建一个 mainWindow 项目,画好UI

其中,有部分控件都设置好了一些属性

2、代码演示

篇幅原因这里仅放置部分代码

XImage 是继承了 widget 的类,主要用于处理图片

// 菜单-打开 按钮触发
void XImage::open()
{
    // 选择图片
    QString fileName = QFileDialog::getOpenFileName
            (this,"选择图片","C:/Users/patient/Pictures/Saved Pictures","请选择图片格式( *.jpg);;请选择图片格式( *.png)");
    // 判断文件名是否栈空
    if(fileName.isEmpty()) return;
    src.load(fileName);
    // 改变大小为 图片的大小
    resize(src.size());
    // 将原图备份
    src_bak = src.copy();
}

// 菜单-保存 按钮触发
void XImage::save()
{
    // 判断备份的图片是否存在
    if(src_bak.isNull()) return;
    QString fileName= QFileDialog::getSaveFileName
            (this,"保存图片","C:/Users/patient/Pictures/Saved Pictures","请选择图片格式( *.jpg);;请选择图片格式( *.png)");
    if(fileName.isEmpty()) return;
    if(!src_bak.save(fileName)) return;
}

void XImage::paintEvent(QPaintEvent * ev)
{
    QPainter p(this);
    // 判断图片有没有
    if(src_bak.isNull()) return;
    // 绘制图片
    p.drawImage(0,0,src_bak);
}

void XImage::mouseMoveEvent(QMouseEvent *event)
{
    // 判断图片有没有打开,避免报错
    if(src_bak.isNull()) return;
    // 初始化鼠标位置
    if(mpos.isNull()) mpos = event->pos();

    // 设置绘制基类
    QPainter p(&src_bak);

    // 设置抗锯齿效果
    p.setRenderHint(QPainter::Antialiasing);
    // 设置画笔样式
    pen.setCapStyle(Qt::RoundCap);  //设置圆形画笔
    pen.setJoinStyle(Qt::RoundJoin);    // 设置连接处为圆形
    p.setPen(pen);

    // 画直线,读取鼠标位置
    p.drawLine(mpos,event->pos());

    // 将鼠标位置记录下来
    mpos = event->pos();

    // 刷新窗口
    update();
}

void XImage::mouseReleaseEvent(QMouseEvent *event)
{
    mpos = QPoint();
}

// 写入画笔大小
void XImage::setPenSize(int size)
{
    pen.setWidth(size);
}

// 设置画笔颜色,可以通过颜色选择器改变画笔
void XImage::setPenColor(QColor color)
{
    pen.setBrush(color);
}

// 橡皮擦
void XImage::setEraser(int size)
{
    pen.setWidth(size);
    // 用原图做画笔,实现橡皮擦功能
    pen.setBrush(QBrush(src));
}

3、演示效果

猜你喜欢

转载自blog.csdn.net/qq_39085747/article/details/129657388
今日推荐