Qt繪圖

如果給窗口繪圖,一定要在paintEvent上繪
pixmap和bitmap的區別僅僅是bitmap只有黑白兩種顏色
常用繪圖設備:
  QPixmap 針對屏幕進行優化了,與平臺相關,但是不能對圖片進行修改
  QImage 與平臺無關,可以對圖片進行修改,可以在線程中繪圖
  QPicture        保存繪圖的狀態(二進制文件) 

QPixmap  -> QImage
QPixmap a;
a.toImage();

QImage  ->QPixmap
QImage  b;
QPixmap::fromImage(b);

updata()相當於間接調用paintevent函數



如果不在窗口繪圖,在指定設備上繪圖
QPainter p;
QPicture pic;
p.begin(&pic);
//繪圖動作
p.end();
pic.save("...");

//加載
QPicture temp;
temp.load("...");




//不規則窗口
1)給窗口畫背景圖
2)去邊框//去窗口邊框
setWindowFlags(Qt::FramelessWindowHint | windowFlags());//windowlags是獲取原來的標記,是在原來的基礎上加多了屬性
3)設置屬性
setAttribute(Qt::WA_TranslucentBackground);//把背景色變成透明狀
4)移動座標是相對於屏幕而言的

void Widget::paintEvent(QPaintEvent *)
{
QPixmap pixmap;
QPainter p(this);
p.drawPixmap(100,100,150,120,QPixmap(":/new/prefix1/picture/w291 (5).jpg"));
}

void Widget::mousePressEvent(QMouseEvent *e)
{
if(e->button()==Qt::LeftButton)
{
//差值座標等於當前座標減去左上角的座標的差值
p=e->globalPos()-this->frameGeometry().topLeft();
}
if(e->button()==Qt::RightButton)
{
this->close();
}
}

void Widget::mouseMoveEvent(QMouseEvent *e)
{
if(e->buttons() & Qt::LeftButton)
{
move(e->globalPos() - p );
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章