Qt九宫格

该博客介绍了如何在Qt环境中实现九宫格切图功能,通过设定原始图片的尺寸和预设切图区域,进行图片的切割和伸缩变换。具体步骤包括确定图片像素大小,切割原图的九个部分,然后对中间五个部分进行缩放,最后将切好的图片组合成新的图像。这个过程对于图像处理和UI设计具有实际应用价值。
摘要由CSDN通过智能技术生成

在这里插入图片描述
x1是1和7的最大理想宽度(也就是你想要保存的宽度); x2同理;
想在Qt实现九宫格切图,第一:需要先确定原来图片的像素大小,其次确定好四个角的宽度和高度,因为四个角是你所需要不变的部分。第二:则需要确定你所需要图片的像素大小,根据新图片的宽度以及高度,确定3, 4, 5, 6, 8几个部分scaled()所需伸缩变化大小。第三:根据之前所切的图片组合成一张你所需要的图片。

/*
* @brief:九宫格缩放图片
* @param: pixName[in] 原来图片的路径
* @param: x1[in]	左上角预设图片宽度
* @param: y1[in]	左上角预设图片高度
* @param: x2[in]	右上角预设图片宽度
* @param: y2[in]	左下角预设图片宽度
* @param: iNewPixWidth[in]	放大/缩小图片的宽度
* @param: iNewPixHeight[in]	放大/高度
* @return: QImage  
*/
QImage FrameChange::framePix(const QString& pixName, int x1, int y1, int x2, int y2, int inewPixWidth, int inewPixHeight)
{	
	QPixmap* pix = new QPixmap(pixName);
	//切割原图
	QPixmap pix_1 = pix->copy(0, 0, x1, y1);
	QPixmap pix_3 = pix->copy(pix->width() - x2, 0, x2, y1);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
	QPixmap pix_7 = pix->copy(0, pix->height() - y2, x1, y2);
	QPixmap pix_9 = pix->copy(pix->width() - x2, pix->height() - y2, x2, y2);

	QPixmap pix_2 = pix->copy(x1, 0, pix->width() - x1 - x2, y1);
	QPixmap pix_4 = pix->copy(0, y1, x1, pix->height() - y1 - y2);
	QPixmap pix_6 = pix->copy(pix->width() - x2, y1, x2, pix->height() - y1 - y2);
	QPixmap pix_8 = pix->copy(x1, pix->height() - y2, pix->width() - x1 - x2, y2);

	QPixmap pix_5 = pix->copy(x1, y1, pix->width() - x1 - x2, pix->height() - y1 - y2);


	//进行伸缩变换
	pix_2 = pix_2.scaled(iNewPixWidth- x1 - x2, y1, Qt::IgnoreAspectRatio);
	pix_4 = pix_4.scaled(x1, iNewPixHeight- y1 - y2, Qt::IgnoreAspectRatio);
	pix_5 = pix_5.scaled(iNewPixWidth- x1 - x2, iNewPixHeight- y1 - y2, Qt::IgnoreAspectRatio);
	pix_6 = pix_6.scaled(x2, iNewPixHeight- y1 - y2, Qt::IgnoreAspectRatio);
	pix_8 = pix_8.scaled(iNewPixWidth- x1 - x2, y2, Qt::IgnoreAspectRatio);

	QImage resultPix(QSize(iNewPixWidth, iNewPixHeight), QImage::Format_ARGB32_Premultiplied);
	QPainter painter(&resultPix);
	//消除背景阴影(如果背景出现阴影则需要,反之不需要)
	painter.setRenderHint(QPainter::Antialiasing, true);
	painter.setCompositionMode(QPainter::CompositionMode_Source);
	painter.fillRect(QRect(0, 0, iNewPixWidth, iNewPixHeight), Qt::transparent);
	painter.setCompositionMode(QPainter::CompositionMode_SourceOver);

	//组合碎片
	if (!resultPix.isNull())
	{
		painter.drawPixmap(0, 0, pix_1);
		painter.drawPixmap(x1, 0, pix_2);
		painter.drawPixmap(iNewPixWidth- x2, 0, pix_3);

		painter.drawPixmap(0, y1, pix_4);
		painter.drawPixmap(x1, y1, pix_5);
		painter.drawPixmap(iNewPixWidth- x2, y1, pix_6);

		painter.drawPixmap(0, iNewPixHeight- y2, pix_7);
		painter.drawPixmap(x1, iNewPixHeight- y2, pix_8);
		painter.drawPixmap(iNewPixWidth- x2, iNewPixHeight- y2, pix_9);
		painter.end();
	}
	return resultPix;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: QT九宫格数字虚拟键盘是一种常见的虚拟键盘布局,通常用于触摸屏设备上。它由一个3x3的方格组成,每个方格代表一个数字键。用户可以通过选择方格来输入数字。 在QT中,可以使用QGridLayout布局管理器来创建九宫格数字虚拟键盘。首先,我们需要创建一个QWidget作为键盘的父容器,并设置其布局为QGridLayout。接下来,创建9个QPushButton作为数字键,并将它们依次添加到布局中。 为了让用户能够输入数字,我们需要连接每个按钮的clicked信号到一个槽函数中。在槽函数中,我们可以使用QPushButton的text()函数获得被点击的按钮上的数字,并将其输出到所需的地方(比如文本框)。 除了数字键,通常还会包括一些特殊功能键,比如删除键和确定键。我们可以在布局中添加这些功能键,并为它们设置相应的槽函数来处理用户的操作。 在虚拟键盘上显示输入的数字通常需要一个文本框或标签来显示。我们可以使用QLineEdit或QLabel来实现这个功能。在槽函数中,将获取的数字添加到文本框或标签的文本中,以实时显示用户的输入。 最后,在程序中需要适当地设置虚拟键盘的大小和位置,以确保它能够在合适的位置进行显示,并能够被用户方便地使用。 总之,QT九宫格数字虚拟键盘是一种常见的输入方式,可以方便地在触摸屏设备上输入数字。通过使用QT的布局管理器和按钮组件,我们可以轻松创建这样一个虚拟键盘,并使其能够与其他组件进行交互,实现数字的输入和显示。 ### 回答2: Qt 九宫格数字虚拟键盘是基于Qt框架开发的一种虚拟键盘,用于在数字输入场景下提供更友好的用户界面。 该虚拟键盘的特点是使用九宫格布局,每个数字都对应一个按钮,用户可以通过点击按钮来输入数字。九宫格布局是指将数字按照3x3的矩阵排列,每个数字占据一个格子。这样的布局方式可以很好地适应不同尺寸的屏幕,同时也便于用户进行输入。 Qt提供了便捷的UI控件和事件处理机制,可以很方便地实现九宫格数字虚拟键盘。开发者可以使用Qt提供的按钮控件来创建数字按钮,并为每个按钮绑定相应的事件处理函数。当用户点击按钮时,事件处理函数负责获取按钮对应的数字,并在输入框中显示出来。 除了数字按钮,该九宫格虚拟键盘还可以包含一些特殊按钮,比如清除按钮、删除按钮和确认按钮。清除按钮用于清空输入框中的内容,删除按钮用于删除输入框中的最后一个数字,确认按钮用于确认当前输入的数字。这些特殊按钮也需要绑定相应的事件处理函数,以实现对输入状态的控制。 总之,Qt九宫格数字虚拟键盘是一种基于Qt框架开发的方便实用的输入工具,适用于数字输入场景,可以提高用户的输入效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Geminikzx

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值