Qt添加背景图片

主界面中添加

首先,创建资源文件
Qt添加背景图片_第1张图片
我这个工程名字叫做untitled,右键untitled->添加新文件->Qt Resource file
在工程目录下建立一个文件夹image用来存放图片

在main.cpp中添加
Qt添加背景图片_第2张图片

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

得到效果图
Qt添加背景图片_第3张图片
但是光是这样,图片不会随着窗口大小变化而变化,就像是这样
Qt添加背景图片_第4张图片
那么怎么才能动态固定图片大小那,并且我发现一个问题,当设置子界面后
Qt添加背景图片_第5张图片
再退出后主界面背景就没了
然后我想了一下,因为我是这么建立子界面和主界面的链接的
我在子界面的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;
}

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

一种方案是
Qt添加背景图片_第6张图片
把图片大小和界面大小设置成一样,并且固定界面大小,如上述代码所做,但是这样界面大小不可调节

另一种方案是:

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()));

}

你可能感兴趣的:(Qt,C++学习笔记)