优化绘图QPixmap
Optimized drawing on QPixmap
我有一个关于如何实现某种图形编辑器的小问题。对于绘画,我使用这种方法:首先我检查鼠标左键是否被点击,然后我在QPixmap上的event->pos()处画一个像素,之后我调用update();重新画一下。如果鼠标被按下按钮移动,我也会在QPixmap上的两个点之间画线(因为没有它,它只会有一些点)。它工作得很好,但我想知道是否有更优化的方法来做到这一点。以下是一些代码(我跳过了缩放,在像素之间连接缺失像素等部分)
void Editor::paintEvent(QPaintEvent *event)
{
painter.drawPixmap(QRect(0, 0, image.width() * zoom , image.height() * zoom),
image);
}
void Editor::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
setImagePixel(event->pos());
}
}
void Editor::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton)
{
setImagePixel(event->pos(), true);
}
}
void Editor::setImagePixel(const QPoint &pos)
{
QPainter painter(&image);
if(image.rect().contains(i, j))
{
painter.begin(&image);
painter.setPen(primaryColor);
painter.drawPoint(i, j);
painter.end();
}
}
是的,我会使用QPainterPath及其API来绘制手工制作的形状。看看它的方法:moveTo()
和lineTo()
,这将让你摆脱绘图逻辑(缺少像素等)。它也很容易与鼠标事件结合使用。
希望这对你有帮助。
相关文章:
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- GTKMM:拍摄绘图区域的屏幕截图?
- QPixmap在Qt中加载了许多图像
- GTKMM:如何将键盘事件附加到绘图区域?
- OpenGL:使用实例化绘图与我正在绘制的帧缓冲进行绘制
- 为什么在我释放左键单击后,我的绘图会消失
- 向 QPixmap 添加边框
- 如何防止opengl绘图拉伸到窗口大小?
- QT 无法通过上下文菜单添加新绘图 (QCustomPlot)
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- 单击"推送"按钮应使用Qt C++在不同的窗口中显示绘图
- 通过信号槽发送QPixmap指针,空像素图数据
- 从 C++ 调用 GNU 绘图,无需用户输入
- 如何使用 PPM 格式的 uchar* 数组填充 QPixmap
- 解决方法:QPixmap:在GUI线程之外使用pixmap是不安全的
- 播放视频时在 qwidget 上绘图
- 如何在QWidget中获取QtDataVizualization的QPixmap并保存到文件中?
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 在 qt 中的绘图中拖动误差线
- 优化绘图QPixmap