一,给主窗口添加背景
我们在做Qt项目的时候,难免需要在主场口上面添加背景图片,一般有两种方法来实现这一功能,可以在主窗口上面粘贴一个很大的QLabel然后在QLabel上面绘制图片,一般不会这样做,另外一种放法我们就需要重写绘制事件函数。paintEvent事件是在窗口状态改变之后处罚的,窗口的状态改变,可以是大小改变,也可以是别的。
如下:
头文件:
protected:
//只要窗口状态改变自动调用此函数
//需要绘制窗口必须通过此函数实现
//重新绘图函数
void paintEvent(QPaintEvent *);
然后在源文件实现:
void painter::paintEvent(QPaintEvent *)
{
//方法一
//QPainter p(this);
//创建画家对象 指定当前窗口为绘图设备
QPainter p;
p.begin(this);
//绘图操作
//p.drawPixmap(0, 0, width(), height(), QPixmap("./image/c++father.jpg"));
//获取窗口的整个区域
p.drawPixmap(rect(), QPixmap("./image/c++father.jpg"));
//定义画笔
QPen pen;
pen.setWidth(5);//设置线宽119 126 194
// pen.setColor(Qt::red);//设置颜色
pen.setColor(QColor(119, 126, 194));//通过rgb
pen.setStyle(Qt::DashDotDotLine);
//把画笔交给画家
p.setPen(pen);
//画直线
p.drawLine(50, 50, 150, 50);
p.drawLine(50, 50, 50, 150);
//创建画刷
QBrush brush;
brush.setColor(Qt::red);
brush.setStyle(Qt::Dense1Pattern);
p.setBrush(brush);
//画矩形
p.drawRect(150, 150, 100, 50);
//画圆
p.drawEllipse(QPoint(150, 150), 50, 25);
//画笑脸
p.drawPixmap(x, 200, 80, 80, QPixmap("./image/face.png"));
p.end();
}
注:
** 二,设置窗口的一些基本属性**
//配置主场景
//设置固定大小
setFixedSize(320, 588);
//设置图标
setWindowIcon(QIcon(":/image/face.png"));
//设置title
setWindowTitle("测试");
三,去掉窗口边框并且移动窗口:
1.首先去掉边框:
关于WindowFlags枚举值很多,其中有一个WindowStaysOnTopHint,可以让窗体位于所有界面之上,类似于QQ主面板,一打开就在所有软件之上
//去掉边框
setWindowFlags(Qt::FramelessWindowHint | windowFlags());
2.去掉边框之后是不能移动的,我们需要重写鼠标事件
1.重写鼠标按下事件
void Widget::mousePressEvent(QMouseEvent *event)
{
//判断鼠标按下的是否为左键
if (event->button() == Qt::LeftButton)
{
PressStatus = true;
//记录鼠标按下左键的位置
MousePoint = event->pos();
}
}
2.鼠标移动事件重写
// 若鼠标左键被按下,移动窗体位置
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if (PressStatus)
// 鼠标相对于窗体的位置 event->globalPos() - this->pos()
move(event->pos() - MousePoint + this->pos());
}
3.鼠标释放事件重写
// 设置鼠标未被按下
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
Q_UNUSED(event);
PressStatus = false;
}