我试图在互联网上找到一些帮助,我有一些代码要测试,但没有一个像我想要的那样。
我会用Qt逐像素绘制。
我尝试在QImage
内QLabel
使用受保护的事件mousePressEvent
,但像素太小而无法看到它们。
我试图缩放我的图像,它更好,但是位置X,Y现在与像素的位置不同,或者它们与像素位置不同步。
这里有我想做的截图,如果有人有想法重新创建这个......
如果我可以通过Qt完全做到这一点,我将节省大量时间,只是逐个像素的基本绘图,我用油漆,黑白格式创建了这个例子,缩放到800%。
感谢。
答案 0 :(得分:0)
这是一个针对特定大小进行硬编码的解决方案 - 只需实现像素图和绘制小部件之间的相对坐标映射,就可以了。
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0) : QWidget(parent), pressed(0) {
color = Qt::black;
pixmap = new QPixmap("h:/small.png");
resize(240, 240);
}
~Widget() { if (pixmap) delete pixmap; }
protected:
void paintEvent(QPaintEvent *) {
QPainter painter(this);
painter.drawPixmap(0, 0, pixmap->scaled(240, 240));
painter.drawPixmap(0, 0, *pixmap);
}
void mousePressEvent(QMouseEvent *e) {
if (e->button() == Qt::RightButton)
color = color == Qt::black ? Qt::white : Qt::black;
else {
pressed = 1;
draw(e);
}
}
void mouseReleaseEvent(QMouseEvent *) { pressed = 0; }
void mouseMoveEvent(QMouseEvent *e) { draw(e); }
private:
void draw(QMouseEvent *e) {
if (pressed) {
QPainter painter(pixmap);
painter.setPen(color);
int x = e->pos().x() / 12;
int y = e->pos().y() / 12;
painter.drawPoint(x, y);
repaint();
}
}
QColor color;
QPixmap *pixmap;
bool pressed;
};