QPainter使用整理
QPainter 基礎繪圖的幾種用法
方法一:無參構造畫家時,需要手動調用begin(this)和end() 函數
void MyWidget::paintEvent(QPaintEvent *)
{
 QPainter p;
 p.begin(this);
 p.drawLine(…); // drawing code
 p.end();
 }
 。。
方法二:有參構造畫家時,系統會自動調用begin(this)和end() 函數,可以立即直接使用畫家進行繪圖。
 這個構造函數對于壽命較短的畫家很方便,例如在QWidget::paintEvent()中,并且只應該使用一次
 void MyWidget::paintEvent(QPaintEvent *)
{
 QPainter p(this);
}
 方法三:創建畫布,將其作為參數構造畫家
//使用畫家繪圖
 p.drawLine(…); // drawing code
 …
QPainter使用save與restore
在Qt中進行圖像繪制,需要用到QPainter對象,這個對象可以幫助我們完成一些簡單功能的繪制,比如說繪制線條,繪制折線等簡單的繪制功能。
QPainter對象,有兩個很有意思的函數,這兩個函數相互之間起作用,下面,我們就來看一下這兩個函數,save函數與restore函數。
painter->save();//保存當前Painter狀態transform.translate(m_point.x(), m_point.y());//沿著x坐標系移動第一個變量,沿著y坐標系移動第二個變量transform.rotate(-m_realAngle);//繞軸逆時針旋轉變量的角度transform.translate(-m_point.x(), -m_point.y());//和上面移動相反,返回原先的移動painter->setTransform(transform, true);//第二個變量為true,故合并指定的變換與現在的變換painter->setPen(pen);//設置畫筆painter->setBrush(brush);//設置畫刷painter->drawPolygon(polygon);//將向量導入,繪制折線painter->restore();//恢復上面保存的狀態在這里的圖像繪制,調用了這兩個函數,在一開始,調用save函數,保存此時QPainter對象的狀態,然后,下面開始進行一系列圖像繪制,程序中寫下了注釋,大家可以參考,這只是程序里的一小片段。而在繪圖結束,再調用restore函數,這里的作用是恢復QPainter對象的狀態為之前保存時候的狀態。
在繪制復雜圖形時候,我們常用這個功能,來保證圖形的正確繪制,不因為多次變換QPainter屬性導致繪圖錯誤,只需要調用這一組函數,就能實現QPainter狀態的存儲與在此使用。
Qt的mouseMoveEvent的一些問題:
在Qt中要捕捉鼠標移動事件需要重寫MouseMoveEvent,但是MouseMoveEvent為了不太耗資源在默認狀態下是要鼠標按下才能捕捉到。要想鼠標不按下時的移動也能捕捉到,需要setMouseTracking(true)。qt判定某個點是否在多邊形區域內
QVector<QPointF> vpf;QPointF pfIn = QPointF(0,0);QPointF pf = QPointF(-10,-10);vpf.append(pf);pf = QPointF(10,-10);vpf.append(pf);pf = QPointF(10,10);vpf.append(pf);pf = QPointF(-10,10);vpf.append(pf);QPolygonF pol(vpf);qDebug()<<"pol:"<<pol;if(pol.contains(pfIn)){qDebug()<<"pol contains ptIn";}if(pol.containsPoint(pfIn,Qt::WindingFill)){qDebug()<<"pol containsPoint ptIn WindingFill";}QPolygon
一、描述
 QPolygon繼承自是QVector 。表示多邊形的點集。除了QVector提供的功能外,QPolygon還提供了一些特定于點的功能。
二、成員函數
 1、QPolygon(const QRect &rectangle, bool closed = false)
從給定的矩形構造一個多邊形。如果closed為true,則多邊形的第五個點設置為rectangle.topLeft()。
2、QPolygon(const QVector &points)
 可以從Qvector數據轉過來
 從點集構造一個多邊形。
3、QPolygon(int size)
構造一個多邊形,含有size個空點(QPoint(0,0))。
4、QPolygon()
構造一個多邊形,不含點。
5、QRect boundingRect()
多邊形的外接矩形。如果多邊形為空則返回QRect(0, 0, 0, 0)。
QPainter painter(this); painter.setPen(QPen(Qt::cyan, 3, Qt::DashDotLine));QPolygon polygon = QPolygon(); polygon << QPoint(22,33)<<QPoint(78,45)<<QPoint(111,233)<<QPoint(234,88)<<QPoint(34,89); painter.drawPolygon(polygon);painter.setPen(QPen(Qt::red, 3, Qt::DashDotLine)); painter.drawRect(polygon.boundingRect());用QPolygon可以實現多邊形填充。
 PolygonWidget::PolygonWidget(QWidget *parent) : QWidget(parent), ui(new Ui::PolygonWidget) {
 ui->setupUi(this);
}
PolygonWidget::~PolygonWidget() {
 delete ui;
 }
void PolygonWidget::paintEvent(QPaintEvent *event) {
 Q_UNUSED(event);
}
參考:
總結
以上是生活随笔為你收集整理的QPainter使用整理的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: excel文件在u盘损坏怎么办啊 U盘中
 - 下一篇: 文件或目录损坏且无法读取 怎么办 文件损