1. 划线
void QPainter::drawLine(int x1, int y1, int x2, int y2)
2. 设置颜色
void QPainter::setPen(const QColor &color);
QColor(int r, int g, int b, int a = 255);
3. 设置坐标
QPainter _selfPaint;
_selfPaint.translate(400,300); //设置坐标转化,设置400,300为_ildPaint的0点坐标;
_selfPaint.scale(300.0/32767, 300.0/32767); // 设置坐标放大倍数,当前的32767相当于原来的300;长度粗细都放大
4. 使用过程遇到的小问题
参考:https://blog.csdn.net/qq21497936/article/details/105506028
如果是直接调用QPainter则只能在paintEvent(QPaintEvent *)中使用。因此大部分使用QPainter的场景都是在paintEvent中。
但目前我希望不在这个函数里面调用,因为当前的需求是需要画完一个图形就显示出来。具体实现方法如下:
声明一个QLabel,然后声明一个QPixmap并且将这个label作为pixmap的参数传入;然后再把pixmap传入QPainter对象中,接下来使用Qpainter对象画的图形在执行完后就画显示在界面的label中。
目前试了其它wedgit都无法实现画图效果,只有QLabel。因为wedgit都带有paintEvent;
另一个需要注意的是,调用QPainter画完图形并不会立刻显示,要等函数推出才显示;这可能也是调用了QLabel控件的PaintEven事件吧。目前没深究。
参考代码如下:
qDebug() << "开始播放";
QLabel *painterLabel = new QLabel(600,600);
int XZero = 0, YZero = 0;
QPainter _selfPaint(&pixmap);
_selfPaint.save();
_selfPaint.setPen(QPen(QColor(0,100,200),2));
_selfPaint.drawLine(XZero,YZero,300,300);
_selfPaint.restore();
painterLabel->setPixmap(pixmap);
QThread::usleep(1000000);
qDebug() << "停止播放";