Qt矩形绘制
Qt矩形繪制
開發工具與關鍵技術:QtCreator、C++ 作者:何任賢 撰寫時間:2019年04月25日 我這個矩形繪制是類繪圖軟件的矩形繪制,我寫了一個簡單的例子,達到繪圖軟件的繪制矩形的效果。 首先要做的是重寫四個方法。void paintEvent(QPaintEvent *e) override;
void mousePressEvent(QMouseEvent *e)override;
void mouseMoveEvent(QMouseEvent *e)override;
void resizeEvent(QResizeEvent *e)override;
繪制事件重寫:必須重寫的
void HuiZhi::paintEvent(QPaintEvent *e)//
{
QPainter p;
p.begin(this);
p.drawPixmap(0,0,*pix);
p.end();
}
鼠標按下事件重寫:獲取鼠標按下位置,即獲取繪制矩形的起始位置
void HuiZhi::mousePressEvent(QMouseEvent *e)//鼠標按下事件
{
stopPos = startPos = e->pos();//獲取鼠標當前位置
e->accept();
}
窗口大小改變事件:這個可以重寫也可以不重寫
void HuiZhi::resizeEvent(QResizeEvent *e)
{
if(pix->width() < e->size().width() || pix->height() < e->size().height())
{
QPixmap *newPix = new QPixmap(e->size());
newPix->fill(Qt::white);
}
重寫resizeEvent使繪圖區域隨著窗口大小變化。
不重寫的話如下圖:
鼠標移動事件重寫:這個是核心,是繪制矩形的操作。
void HuiZhi::mouseMoveEvent(QMouseEvent *e)//鼠標移動事件
{
QPainter p;
QPen pen;
QPen xianpi;
xianpi.setStyle(Qt::PenStyle(1));//畫筆風格
xianpi.setWidth(0);//畫筆寬度
xianpi.setColor(Qt::white);//畫筆顏色
pen.setStyle(Qt::PenStyle(1));
pen.setWidth(0);
pen.setColor(Qt::black);
p.begin(pix);
p.setPen(xianpi);
//清除上次繪制
p.drawRect(startPos.x(),startPos.y(),(stopPos.x()-startPos.x()),(stopPos.y()-startPos.y()));
p.setPen(pen);
//更新鼠標位置
stopPos = e->pos();
//繪制矩形
p.drawRect(startPos.x(),startPos.y(),(stopPos.x()-startPos.x()),(stopPos.y()-startPos.y()));
p.end();
//更新
update();
}
這就能達到繪圖軟件繪制矩形的效果。
注釋那的清除上次繪制并不是把前一個繪制的矩形清除,而是因為為了達到繪圖軟件繪制矩形的那種效果,需要如果不清除的話,如下圖
總結
- 上一篇: 互联网日报 | 7月31日 星期六 |
- 下一篇: 需求文档:没有标准,只有沟通