Vc - Qt - 实现加载图片并显示到窗口中

一、我是如何分析的,并如何做的呢?

1、最终效果展示

 2、如何分析,如何做的呢?

当点击uploadBtn按钮时候,会调用打开文件对话框窗口,对话框限制了图片的后缀,只能打开*.png或者*.jpg的图片,此处做的事情就是加载图片,缩放图片,并将图片显示到QLabel控件上:

void PictureToolWnd::slot_uploadBtnClicked()
{
	QString filepath = QFileDialog::getOpenFileName(nullptr, QStringLiteral("选择图片"), ".", "*.png;*.jpg");
	if (filepath.trimmed().isEmpty() == false)
	{
		QPixmap picture;
		picture.load(filepath);
		picture = picture.scaled(m_picLable->width(), m_picLable->height());
		m_picLable->setPixmap(picture);
	}
}

二、更为具体的一些描述

关于布局:

布局主要采用垂直布局和水平布局相互结合方式,窗体总体布局为垂直布局,垂直布局中添加了一个标签(QLabel)和一个水平布局(里边包含3个按钮)

.

 关于打开文件:

采用QFileDialog函数进行打开文件,需要注意的是关于后面设置选择器的时候,即是 "*.png;*.jpg"这部分的时候,一定要用分号分割,千万不能用逗号分割

	QString filepath = QFileDialog::getOpenFileName(nullptr, QStringLiteral("选择图片"), ".", "*.png;*.jpg");

关于图片缩放:

调用QPixmap的scaled就可以完成缩放功能

​picture = picture.scaled(m_picLable->width(), m_picLable->height());

三、如何获取代码

1、通过csdn下载

QtPictureTool.rar-C++文档类资源-CSDN文库https://download.csdn.net/download/wjl18270365476/50348646

2、参考如下文件目录及详细代码,组织结构

1)代码结构

 2)代码详情

PictureToolWnd类代码

头文件:

#pragma once

#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>

class PictureToolWnd : public QWidget
{
	Q_OBJECT
public:
	PictureToolWnd(QWidget* p = nullptr);
public slots:
	void slot_uploadBtnClicked();
public:
	QLabel* m_picLable;

	QVBoxLayout* m_vLayout;
	QHBoxLayout* m_hLayout;

	QPushButton* m_determineBtn;
	QPushButton* m_cancelBtn;
	QPushButton* m_uploadBtn;
};

源文件:

#include "PictureToolWnd.h"
#include <QFileDialog>

PictureToolWnd::PictureToolWnd(QWidget* p /*= nullptr*/) : QWidget(p)
{
	m_vLayout = new QVBoxLayout();
	setLayout(m_vLayout);
	m_picLable = new QLabel();
	m_picLable->setFixedSize(350, 350);

	m_determineBtn = new QPushButton();
	m_cancelBtn = new QPushButton();
	m_uploadBtn = new QPushButton();

	m_determineBtn->setText("determine");
	m_cancelBtn->setText("cancel");
	m_uploadBtn->setText("uploadBtn");

	m_hLayout = new QHBoxLayout();
	m_hLayout->addWidget(m_uploadBtn);
	m_hLayout->addWidget(m_determineBtn);
	m_hLayout->addWidget(m_cancelBtn);

	m_vLayout->addWidget(m_picLable);
	m_vLayout->addLayout(m_hLayout);

	connect(m_uploadBtn, SIGNAL(clicked()), this, SLOT(slot_uploadBtnClicked()));
}

void PictureToolWnd::slot_uploadBtnClicked()
{
	QString filepath = QFileDialog::getOpenFileName(nullptr, QStringLiteral("选择图片"), ".", "*.png;*.jpg");
	if (filepath.trimmed().isEmpty() == false)
	{
		QPixmap picture;
		picture.load(filepath);
		picture = picture.scaled(m_picLable->width(), m_picLable->height());
		m_picLable->setPixmap(picture);
	}
}

3)main文件,主函数文件

#include <QApplication>

#include "PictureToolWnd.h"

int main(int argc, char** argv)
{
	//
	QApplication app(argc, argv);
	
	PictureToolWnd w;
	w.show();

	return app.exec();
}

四、帮助

如何疑问可留言或者私信我

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 MFC ,可以使用 CStatic 控件来显示图片。以下是一个简单的示例代码,可以实现在当前窗口显示图片: ```cpp // 假设有一个 CStatic 控件 IDC_IMAGE CStatic* pImageControl = (CStatic*)GetDlgItem(IDC_IMAGE); // 加载图片 CImage image; image.Load(_T("path/to/image.jpg")); // 调整控件大小以适应图片 pImageControl->SetBitmap(image.Detach()); pImageControl->SizeToContent(); ``` 这里的关键是将加载图片通过 `SetBitmap` 方法设置到 CStatic 控件,并调用 `SizeToContent` 方法调整控件大小以适应图片。这样就可以在当前窗口显示图片了。 ### 回答2: 要在VC MFC图片显示在当前窗口而不是新建窗口显示,可以使用CStatic控件。 首先,在你的MFC对话框或窗口类的头文件添加一个成员变量,类型为CStatic,例如: CStatic m_staticImage; 接下来,在OnInitDialog()函数,关联这个变量与对应的控件,调用LoadImage()函数加载图片,并使用SetBitmap()函数将图片显示在CStatic控件上,例如: // 与控件关联 m_staticImage.SubclassDlgItem(IDC_STATIC_IMAGE, this); // 加载图片 HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, L"image.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // 显示图片 m_staticImage.SetBitmap(hBitmap); 注意:这里的IDC_STATIC_IMAGE是指你在对话框或窗口资源文件设置的静态控件的ID,image.bmp是你要显示图片的文件路径。 最后,在OnDestroy()函数,销毁图片资源,例如: // 销毁图片 m_staticImage.SetBitmap(NULL); 这样就可以在当前窗口显示图片了。记得在显示图片之后,还需要根据需要处理图片的大小和位置,可以使用MoveWindow()函数进行调整。 ### 回答3: 在VC MFC要将图片显示到当前窗口而不是新建窗口显示,可以通过以下步骤实现: 1. 首先,创建一个控件或者标签(CStatic)来承载图片。该控件或标签可以在对话框资源添加或者通过代码动态创建。 2. 在对话框的类添加一个变量来引用该控件,可以通过DDX_Control或者GetDlgItem函数进行关联。 3. 加载显示图片资源,可以使用LoadImage或者CImage类的Load函数来加载图片文件。 4. 将加载图片设置到控件,可以使用CStatic类的SetBitmap或者SetIcon函数来设置位图或者图标。 5. 在需要显示图片的时候,调用控件的相应函数来进行更新。 下面是一个简单的示例代码,演示了如何在VC MFC的对话框显示图片到当前窗口: 1. 在对话框资源添加一个静态文本框控件(IDC_STATIC_IMAGE)。 2. 在对话框类的头文件添加成员变量用于引用该控件: ``` CStatic m_staticImage; ``` 3. 在DoDataExchange函数将成员变量与对话框资源的控件进行关联: ``` DDX_Control(pDX, IDC_STATIC_IMAGE, m_staticImage); ``` 4. 在OnInitDialog函数加载显示图片: ``` CImage image; image.Load(_T("image.bmp")); // 加载图片 HBITMAP hBitmap = (HBITMAP)image; // 获取位图句柄 m_staticImage.SetBitmap(hBitmap); // 设置位图到控件 ``` 通过以上步骤,就可以在VC MFC的对话框图片显示到当前窗口而不是新建窗口显示了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫忘输赢

莫忘输赢 - 收钱袋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值