QT窗体添加背景图片以及实现不规则窗体的方法

插入背景图片的实现方法

在构造函数中添加:

setWindowFlags(Qt::FramelessWindowHint);
setWindowOpacity(1);
QPixmap pixmap = QPixmap(":/Image/login.png").scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette);

不规则窗体的实现方法

此方法需要重写paintEvent函数,进行背景的绘制:

//在头文件中添加
private:
    QPixmap pic;
    virtual void paintEvent(QPaintEvent *paintevent);

//在构造函数中添加
setWindowFlags(Qt::FramelessWindowHint);//设置窗体无边框
setAttribute(Qt::WA_TranslucentBackground);//设置背景透明
pic.load(tr(":/Image/login.png"));//login.png的背景是透明的,网上下载图片或用PS很容易就能做出来
resize(pic.size());//设置图像的大小

//实现paintEvent函数
void CLogin::paintEvent(QPaintEvent *paintevent)
{
    paintevent->ignore();
    QPainter painter(this);
    painter.drawPixmap(0, 0, pic);//绘制图像
}
这样窗口是创建好了,但是窗口是无法移动的,所以还要重载鼠标事件:
//重写三个鼠标事件来实现窗口移动
private:
    bool m_Drag;//记录鼠标是否按下
    QPoint m_DragPosition;//记录鼠标位置

    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);


void CLogin::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        m_Drag = true;
        //event->globalPos()获取的鼠标位置是鼠标偏离电脑屏幕左上角(x=0,y=0)的位置
        //pos()获取的位置是主窗口(widget窗口)左上角(边框的左上角,外左上角)相对于电脑屏幕的左上角的(x=0,y=0)偏移位置
        m_DragPosition = event->globalPos() - this->pos();
        event->accept();
    }
}


void CLogin::mouseMoveEvent(QMouseEvent *event)
{
    if (m_Drag && (event->buttons() && Qt::LeftButton))//注意这里是event->buttons(),不是event->button()
    {
        move(event->globalPos() - m_DragPosition);
        event->accept();
    }
}


void CLogin::mouseReleaseEvent(QMouseEvent *event)
{
    m_Drag=false;
}
但是因为没有边框,所以关闭按钮,最小化按钮都要自己加进去,下面是添加关闭按钮的例子:
//在构造函数中添加
int wide = width();//获取界面的宽度
QToolButton *closeButton= new QToolButton(this);//构建关闭按钮
QPixmap closePix;
closePix.load(tr(":/Image/close.png"));
closeButton->setIcon(closePix);//设置关闭按钮图标
closeButton->setGeometry(wide-104,180,35,35);//设置关闭按钮在界面的位置
closeButton->setToolTip(tr("关闭"));//设置鼠标移至按钮上的提示信息
closeButton->setStyleSheet("background-color:transparent;");//设置关闭按钮的样式
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
窗体效果如下图所示:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值