⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iconeditor.cpp

📁 qt 初学者的好例子 可以很快上手 欢迎使用 多谢留言指点
💻 CPP
字号:
#include <QtGui>#include "iconeditor.h"IconEditor::IconEditor(QWidget *parent)    : QWidget(parent){    setAttribute(Qt::WA_StaticContents);    setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);    curColor = Qt::black;    zoom = 8;    image = QImage(16, 16, QImage::Format_ARGB32);    image.fill(qRgba(0, 0, 0, 0));}void IconEditor::setPenColor(const QColor &newColor){    curColor = newColor;}void IconEditor::setZoomFactor(int newZoom){    if (newZoom < 1)        newZoom = 1;    if (newZoom != zoom) {        zoom = newZoom;        update();        updateGeometry();    }}void IconEditor::setIconImage(const QImage &newImage){    if (newImage != image) {        image = newImage.convertToFormat(QImage::Format_ARGB32);        update();        updateGeometry();    }}QSize IconEditor::sizeHint() const{    QSize size = zoom * image.size();    if (zoom >= 3)        size += QSize(1, 1);    return size;}void IconEditor::mousePressEvent(QMouseEvent *event){    if (event->button() == Qt::LeftButton) {        setImagePixel(event->pos(), true);    } else if (event->button() == Qt::RightButton) {        setImagePixel(event->pos(), false);    }}void IconEditor::mouseMoveEvent(QMouseEvent *event){    if (event->buttons() & Qt::LeftButton) {        setImagePixel(event->pos(), true);    } else if (event->buttons() & Qt::RightButton) {        setImagePixel(event->pos(), false);    }}void IconEditor::paintEvent(QPaintEvent *event){    QPainter painter(this);    if (zoom >= 3) {        painter.setPen(palette().foreground().color());        for (int i = 0; i <= image.width(); ++i)            painter.drawLine(zoom * i, 0,                             zoom * i, zoom * image.height());        for (int j = 0; j <= image.height(); ++j)            painter.drawLine(0, zoom * j,                             zoom * image.width(), zoom * j);    }    for (int i = 0; i < image.width(); ++i) {        for (int j = 0; j < image.height(); ++j) {            QRect rect = pixelRect(i, j);            if (!event->region().intersect(rect).isEmpty()) {                QColor color = QColor::fromRgba(image.pixel(i, j));                painter.fillRect(rect, color);            }        }    }}void IconEditor::setImagePixel(const QPoint &pos, bool opaque){    int i = pos.x() / zoom;    int j = pos.y() / zoom;    if (image.rect().contains(i, j)) {        if (opaque) {            image.setPixel(i, j, penColor().rgba());        } else {            image.setPixel(i, j, qRgba(0, 0, 0, 0));        }        update(pixelRect(i, j));    }}QRect IconEditor::pixelRect(int i, int j) const{    if (zoom >= 3) {        return QRect(zoom * i + 1, zoom * j + 1, zoom - 1, zoom - 1);    } else {        return QRect(zoom * i, zoom * j, zoom, zoom);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -