Qt添加背景图片

主界面中添加

首先,创建资源文件
在这里插入图片描述
我这个工程名字叫做untitled,右键untitled->添加新文件->Qt Resource file
在工程目录下建立一个文件夹image用来存放图片

在main.cpp中添加
在这里插入图片描述

    w.setAutoFillBackground(true);
    QPalette palette;
    QPixmap pixmap(":/image/2.jpg");
    palette.setBrush(QPalette::Window, QBrush(pixmap));
    w.setPalette(palette);

得到效果图
在这里插入图片描述
但是光是这样,图片不会随着窗口大小变化而变化,就像是这样
在这里插入图片描述
那么怎么才能动态固定图片大小那,并且我发现一个问题,当设置子界面后
在这里插入图片描述
再退出后主界面背景就没了
然后我想了一下,因为我是这么建立子界面和主界面的链接的
我在子界面的chiled.cpp中这么写的

Widget *back = new Widget;
back->show();
this->hide();

这么相当于原先在main里面创建了个主界面,但是由于点击信号进入子界面
使得执行子界面的部分函数,然后子界面里返回按钮我重新创建了一个主界面,但是这个主界面却没有设置背景,所以就会没有背景显示

我知道这样子建立主界面和子界面的联系是非常不好的,因为这每次点击子界面里面的返回主界面都会创建一个新的主界面
这样子写也不是不可以,只是要记得在主界面跳转到子界面的槽函数里

void Widget::on_pushButton_3_clicked()
{
    
    
    chiled *to_child = new chiled;
    to_child->show();
    delete this;
}

要写delete this;
不要写 this->hide();
否则就会有一堆主界面在内存中没有消失

同样的需要每次在子界面跳转主界面槽函数中重新添加设置背景的部分

void chiled::on_commandLinkButton_clicked()
{
    
    
    Widget *back = new Widget;

    back->setAutoFillBackground(true);
    QPalette palette;
    QPixmap pixmap(":/image/2.jpg");
    palette.setBrush(QPalette::Window, QBrush(pixmap));
    back->setPalette(palette);
    back->show();

    delete this;
}

好的,那么解决了这个问题,那么我们接下来看看怎么让背景图片大小随着窗口大小变化而变化

一种方案是
在这里插入图片描述
把图片大小和界面大小设置成一样,并且固定界面大小,如上述代码所做,但是这样界面大小不可调节

另一种方案是:

label中添加

label是在ui中决定的label的名字,下面这个方法会让图片把label填充满

void Widget::set5()
{
    
    
    QPixmap *pixmap = new QPixmap(":/image/1.jpg");//加载图片
    pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio);//设置图片大小
    ui->label->setScaledContents(true);//设置label全填效果
    ui->label->setPixmap(*pixmap);//把图片放到label中,其他控件加载图片思路一样的
}

还有另一种方法,是把label设置成图片大小

void Widget::set5()
{
    
    
    QImage image ;
    image.load(":/image/1.jpg") ;

    ui->label_5->setPixmap(QPixmap::fromImage(image));
    ui->label_5->resize(QSize(image.width(),image.height()));

}

猜你喜欢

转载自blog.csdn.net/weixin_44972129/article/details/110389423