項目中經常使用加載圖片:
常用有兩種方式:
1.使用 QWidget 加載圖片:
效果:
?樣例源碼:
int pict_H = ui->widgetImage->height();int pict_W = ui->widgetImage->width();ui->widgetImage->setFixedSize( pict_W ,pict_H);QPixmap pixmap("C:/Users/A013237/Pictures/volume_2024623184252.png");QPalette palette;palette.setBrush(this->backgroundRole(), QBrush(pixmap.scaled( // 縮放背景圖.ui->widgetImage->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));// this->setPalette(palette);ui->widgetImage->setAutoFillBackground(true);ui->widgetImage->setPalette(palette);ui->widgetImage->show();
2.使用 QLabel 加載圖片:
QLabel *label = new QLabel(&window);// 加載圖片,替換為你的圖片路徑QPixmap pixmap("path_to_your_image.jpg");// 如果圖片不在指定路徑或尺寸問題,可以調整大小或使用一個默認的圖片if (pixmap.isNull()) {label->setText("無法加載圖片");} else {label->setPixmap(pixmap);label->setScaledContents(true); // 自動縮放以適應標簽大小}// 在窗口中居中顯示QLabellabel->setGeometry(0, 0, window.width(), window.height());
3. 加載 loading gif 圖片
效果:
?源碼樣例:
#ifndef WAITING_H
#define WAITING_H#include <QWidget>
#include <QLabel>
#include <QMovie>namespace Ui {
class Waiting;
}class Waiting : public QWidget
{Q_OBJECTpublic:explicit Waiting(QWidget *parent = nullptr);~Waiting();private:QMovie *movie;QLabel *label;QLabel * tip_label;QFrame * background;private:Ui::Waiting *ui;
};#endif
cpp
#include "waiting.h"
#include "ui_waiting.h"
#include<QDebug>
Waiting::Waiting(QWidget *parent) :QWidget(parent),ui(new Ui::Waiting)
{ui->setupUi(this);this->setFixedSize(400,400);background = new QFrame(this);background->setStyleSheet("background-color:#0000;border-radius:1px;");background->setGeometry(0, 50, 400,400);label = new QLabel(background);label->setGeometry(0, 0, 400,400);movie = new QMovie(":/Resources/loading-t.gif");movie->setScaledSize(QSize(400,400));label->setScaledContents(true);label->setMovie(movie);movie->start();}Waiting::~Waiting()
{delete ui;
}
使用:
#include "waiting.h"
void MainWindow::on_pushButton_loading_clicked()
{Waiting *w = new Waiting(this);w->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);w->setWindowModality(Qt::ApplicationModal);w->move(880,450);w->show();}