C++ QT 加载网络图片、本地图片

源码下载:C++_QT 加载图片

QTShowImage.cpp

#include "QtShowImage.h"
#include <QMovie>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QPixmap>
#include<QImage>

QtShowImage::QtShowImage(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	connect(ui.pushButton, SIGNAL(pressed()), this, SLOT(on_pushButton_clicked()));
	connect(ui.pushButton_2, SIGNAL(pressed()), this, SLOT(on_pushButton_2_clicked()));

}

void QtShowImage::on_pushButton_clicked()
{
	currentPicture = new QPixmap;
	//获取网络图片
	QNetworkAccessManager *manager;
	manager = new QNetworkAccessManager(this);

	connect(manager, SIGNAL(finished(QNetworkReply*)),
		this, SLOT(replyFinished(QNetworkReply*)));
	manager->get(QNetworkRequest(QUrl("http://www.eutrom.com/images/case_unit_1.png")));
}

void QtShowImage::on_pushButton_2_clicked()
{
	currentPicture = new QPixmap("./Images/head.png");
	QPixmap tianqi_pixmap = currentPicture->scaled(ui.labelImage->width(), ui.labelImage->height(), Qt::KeepAspectRatio);
	ui.labelImage->setPixmap(tianqi_pixmap);
}

void QtShowImage::replyFinished(QNetworkReply *reply)
{
	if (reply->error() == QNetworkReply::NoError)
	{
		//获取字节流构造 QPixmap 对象 
		currentPicture->loadFromData(reply->readAll());
		QDateTime now;
		QString filename = now.currentDateTime().toString("yyMMddhhmmss.jpg");
		currentPicture->save(filename);//保存图片
		currentFileName = filename;
		可以在onpaint中 用QPixmap 显示currentPicture,则这种方法则不需要保存
		QPixmap tianqi_pixmap = currentPicture->scaled(ui.labelImage->width(), ui.labelImage->height(), Qt::KeepAspectRatio);
		//Qt::IgnoreAspectRatio, Qt::SmoothTransformation);//设置图片大小和label的长宽一致
		ui.labelImage->setPixmap(tianqi_pixmap);
		//显示图片,  
		QMovie *move = new QMovie(currentFileName);
		//ui->lableImg->setMovie(move);
		move->start();
	}
}

QtShowImage.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtShowImage.h"
#include <QMovie>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QPixmap>
class QtShowImage : public QMainWindow
{
	Q_OBJECT

public:
	QtShowImage(QWidget *parent = Q_NULLPTR);

private:
	Ui::QtShowImageClass ui;
	QPixmap *currentPicture;
	QString	currentFileName;

private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void replyFinished(QNetworkReply * reply);
};

效果图

C++Qt中实现自由矩形图片的截取可以通过以下几个步骤完成: 1. 创建一个Qt应用程序窗口并加载待截取的图片。可以使用QGraphicsView或QLabel来显示图片。 2. 在窗口中设置一个矩形截取区域,可以使用QRubberBand类实现。在鼠标按下事件中创建一个QRubberBand对象,并在鼠标移动事件中更新截取区域的大小和位置。 3. 在鼠标释放事件中获取截取区域的位置和大小信息,并使用QPainter类将截取区域的内容绘制在一个新的QImage对象中。 4. 可选步骤:将截取的图片保存到本地文件或进行其他处理。可以使用QImage的save()方法保存图片。 以下是一个简单的实现示例: ```cpp #include <QtWidgets> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { // 加载待截取的图片 QPixmap image("image.jpg"); // 创建一个用于显示图片的QLabel QLabel *label = new QLabel(this); label->setPixmap(image); setCentralWidget(label); // 监听鼠标事件 label->setMouseTracking(true); label->installEventFilter(this); } protected: bool eventFilter(QObject *watched, QEvent *event) override { if (event->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); if (mouseEvent->button() == Qt::LeftButton) { // 创建QRubberBand对象 rubberBand = new QRubberBand(QRubberBand::Rectangle, this); startPos = mouseEvent->pos(); rubberBand->setGeometry(QRect(startPos, QSize())); rubberBand->show(); } } else if (event->type() == QEvent::MouseMove) { QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); if (rubberBand) { // 更新截取区域的大小和位置 rubberBand->setGeometry(QRect(startPos, mouseEvent->pos()).normalized()); } } else if (event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); if (rubberBand) { // 获取截取区域的位置和大小信息 QRect rect = rubberBand->geometry(); // 在一个新的QImage对象中绘制截取区域的内容 QPixmap image = centralWidget()->grab(rect); QImage croppedImage = image.toImage(); // 保存截取的图片 croppedImage.save("cropped_image.jpg"); // 删除QRubberBand对象 delete rubberBand; rubberBand = nullptr; } } return false; } private: QRubberBand *rubberBand = nullptr; QPoint startPos; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow window; window.show(); return app.exec(); } ``` 这是一个简单的示例,你可以根据需求进行进一步改进和扩展。希望能对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值