日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt矩形绘制

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);

QPainter p(newPix);p.drawPixmap(0,0,*pix);delete pix;pix = newPix; } QWidget::resizeEvent(e);

}
重寫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();
}
這就能達到繪圖軟件繪制矩形的效果。
注釋那的清除上次繪制并不是把前一個繪制的矩形清除,而是因為為了達到繪圖軟件繪制矩形的那種效果,需要如果不清除的話,如下圖

總結

以上是生活随笔為你收集整理的Qt矩形绘制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。