如果给窗口绘图,一定要在paintEvent上绘
pixmap和bitmap的区别仅仅是bitmap只有黑白两种颜色
常用绘图设备:
QPixmap 针对屏幕进行优化了,与平台相关,但是不能对图片进行修改
QImage 与平台无关,可以对图片进行修改,可以在线程中绘图
QPicture
保存绘图的状态(二进制文件)
QPixmap -> QImage
QPixmap a;
a.toImage();
QImage ->
QPixmap
QImage b;
QPixmap::f
romImage(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
);
}
}