QT 在QLabel上连续显示多张图片并刷新(二)

本文介绍了如何在QT环境下使用QLabel组件连续显示多张图片,并进行了功能增强与完善。通过ShowImg.h、ShowImg.cpp和main.cpp三个文件的代码实现,展示了在限制文件大小的情况下动态展示gif效果。
摘要由CSDN通过智能技术生成

就是加了点功能,对前面的做了一些完善。

一、效果(只能上传5M以内的gif,所以减小了录制窗口大小)

在这里插入图片描述

二、实现

①ShowImg.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_ShowImg.h"

#include<iostream>
using namespace std;

#define INTERFACE_WIDTH 1600
#define INTERFACE_HEIGHT 900

class QPushButton;
class QLabel;
class QGroupBox;
class QVBoxLayout;
class QRadioButton;

class ShowImg : public QMainWindow
{
	Q_OBJECT

public:
	ShowImg(QWidget *parent = Q_NULLPTR);

private:
	Ui::ShowImgClass ui;

private:

	QLineEdit *showFilePath_lineedit;
	QLabel *showImg_label;
	QString filePath;
	QList<QString> filePathList;
	QString showfilePath;
	QPixmap img_pix;
	int img_index;
	QTimer *timer_time;

	QGroupBox *showModelbox_gbox;
	QVBoxLayout *showModelbox_Vlayout;
	QRadioButton * once_rbutton;
	QRadioButton * loop_rbutton;
	bool LOOP;

	QGroupBox *buttonGroupBox_gbox;
	QVBoxLayout *buttonGroupBox_Vlayout;
	QPushButton *start_button;
	QPushButton *stop_button;
	QPushButton *exit_button;
	
public:
	void initWindow();
	void getFilesPath();
	void findFiles(string path, vector<string>& files);
private slots:
    void  onceLoop();
    void  loopLoop();
    void  startViewImg()
### 回答1: 采用Qt库在QLabel控件上显示图片并在图片上画直线的实现步骤如下: 1. 创建一个QLabel控件,并设置其大小和位置。 ```cpp QLabel* label = new QLabel(this); label->setGeometry(0, 0, 300, 300); ``` 2. 加载图片并设置为QLabel的背景。 ```cpp QPixmap pixmap(":/image/image.png"); // 从资源文件加载图片 QPalette palette; palette.setBrush(label->backgroundRole(), QBrush(pixmap)); label->setPalette(palette); label->setAutoFillBackground(true); ``` 3. 在QLabel上创建一个QPainter对象,并设置画笔的颜色、宽度等属性。 ```cpp QPainter painter(label); painter.setPen(QPen(Qt::red, 2)); // 设置画笔为红色,宽度为2 ``` 4. 使用QPainter在图片上绘制直线。 ```cpp painter.drawLine(50, 50, 250, 250); // 在图片上绘制一条从(50, 50)到(250, 250)的直线 ``` 5. 更新QLabel控件以显示绘制好的图片。 ```cpp label->update(); ``` 完整代码如下所示: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建主窗体 QWidget window; window.setWindowTitle("Qt Display Image"); window.resize(300, 300); // 创建QLabel控件 QLabel* label = new QLabel(&window); label->setGeometry(0, 0, 300, 300); // 加载图片并设置为QLabel的背景 QPixmap pixmap(":/image/image.png"); // 从资源文件加载图片 QPalette palette; palette.setBrush(label->backgroundRole(), QBrush(pixmap)); label->setPalette(palette); label->setAutoFillBackground(true); // 在QLabel上创建一个QPainter对象,并设置画笔的颜色、宽度等属性 QPainter painter(label); painter.setPen(QPen(Qt::red, 2)); // 设置画笔为红色,宽度为2 // 使用QPainter在图片上绘制直线 painter.drawLine(50, 50, 250, 250); // 在图片上绘制一条从(50, 50)到(250, 250)的直线 // 更新QLabel控件以显示绘制好的图片 label->update(); window.show(); return a.exec(); } ``` 以上代码演示了如何使用QtQLabel显示图片并在图片上绘制直线。图片加载部分使用了资源文件的方式,即图片需要事先添加到Qt的资源文件。 ### 回答2: 在Qt,要在QLabel显示图片并在图片上画直线,您可以按照以下步骤进行操作: 1. 创建一个QLabel对象,并将其设置为一个窗口部件(Widget)的子部件,使用QVBoxLayout进行布局。 ```cpp QLabel *label = new QLabel(this); QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(label); this->setLayout(layout); ``` 2. 加载图片到QPixmap对象,并将其设置到QLabel进行显示。 ```cpp QPixmap pixmap("image.png"); label->setPixmap(pixmap); label->setScaledContents(true); // 自适应QLabel的大小 ``` 3. 创建一个QPainter对象来绘制直线。可以在QLabel的paintEvent事件函数绘制直线。 ```cpp void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawPixmap(label->geometry(), pixmap); // 在QLabel的范围内绘制图片 // 绘制直线 painter.setPen(Qt::red); // 设置直线颜色为红色 painter.drawLine(50, 50, 200, 200); // 在图片上画一条直线,起点(50, 50),终点(200, 200) } ``` 这样,您就可以在QtQLabel显示图片并在图片上绘制直线了。希望对您有所帮助! ### 回答3: 在Qt,要在QLabel显示图片并在图片上画直线,可以通过以下步骤实现: 1. 创建一个QLabel控件,并设置其大小和位置。 ```cpp QLabel *label = new QLabel(this); label->setGeometry(10, 10, 500, 500); ``` 2. 从文件加载图片,并将其设置为QLabel的背景。 ```cpp QPixmap pixmap("image.jpg"); label->setPixmap(pixmap); ``` 3. 在QLabel上添加一个QPainter对象,并设置其渲染目标为QLabel。 ```cpp QPainter painter(label); ``` 4. 使用QPen设置画笔的颜色、宽度等属性。 ```cpp QPen pen(Qt::red); pen.setWidth(2); painter.setPen(pen); ``` 5. 使用QPainter在图片上画直线。 ```cpp painter.drawLine(10, 10, 300, 300); ``` 这将在图片上从点(10, 10)绘制一条直线到点(300, 300)。 6. 结束绘制并更新QLabel显示。 ```cpp painter.end(); label->update(); ``` 通过以上步骤,你可以在QtQLabel控件上显示图片并在图片上画直线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值