Qt使用九宫格原理缩放图片

2020.07.21更新

一.QSS

关于九宫格,首先要学习下QSS的border-image,Qt Assistant中关于Border Image有如下介绍:
A border image is an image that is composed of nine parts (top left, top center, top right, center left, center, center right, bottom left, bottom center, and bottom right). When a border of a certain size is required, the corner parts are used as is, and the top, right, bottom, and left parts are stretched or repeated to produce a border with the desired size.
See the CSS3 Draft Specification for details.
Border Image是由九个部分(左上、中上、右上、左中、中、右中、左下、左下、中下和右下)组成的图像。当Border Image应用到指定目标时,四个角的部分原样使用,并拉伸或平铺顶部、右侧、底部和左侧部分,以生成符合目标尺寸的边框。
具体参考CSS3语法
也就是说border-image在贴图时可以指定参数,将图片分成九个部分,分别贴到目标的相应位置,即通常说的九宫格贴图。
9宫格缩放规则如下:
1、将一张图分割成9块
2、四个角(1、3、7、9)在缩放的时候是保持大小不变
3、图块2、8仅当宽度变化时缩放宽度
4、图块4、6仅当高度变化时缩放高度
5、图块5当图片大小发生变化,宽度和高度都进行缩放

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt中,要实现九宫格输入法(也称为键盘矩阵布局),你可以创建自定义的QLineEdit或使用第三方库,如QTouchLayout。以下是一个简单的步骤指南: 1. **创建自定义输入框**: - 创建一个继承自`QWidget`的新类,比如`NineGridInput`。 - 设计一个9x9的网格布局,包含九个`QPushButton`或`QLabel`,每个按钮代表一个输入键。 - 使用`connect`信号和槽机制,为每个按键绑定点击事件,当按键被点击时,可以触发对应的字符输入。 2. **实现键盘矩阵逻辑**: - 在你的`NineGridInput`类中,添加一个成员变量存储当前选中的按键,初始化时设置默认按键。 - 当点击一个按键时,更新选中按键,并可能触发事件,将选中的键对应的字符添加到文本框中。 3. **使用`QLineEdit`**: - 在布局中添加一个`QLineEdit`,作为输入的显示区域。 - 绑定`QLineEdit`的`textChanged`信号,以便实时更新显示的输入内容。 4. **响应用户输入**: - 用户可以通过点击九宫格中的按键,触发相应的输入行为,这可能涉及到按键映射、撤销重做功能等。 5. **事件处理**: - 可能需要考虑键盘切换、删除键、确认键的逻辑,以及处理触摸设备(如有需要)。 ```cpp // 示例代码片段 class NineGridInput : public QWidget { public: NineGridInput(QWidget* parent = nullptr); private: void keyPressEvent(QKeyEvent* event); // 其他成员变量和方法... }; NineGridInput::NineGridInput(QWidget* parent) { // 初始化9x9网格布局 QGridLayout* layout = new QGridLayout(this); // 添加按键并设置信号槽 QLineEdit*lineEdit = new QLineEdit(parent); connect(lineEdit, &QLineEdit::textChanged, [this](const QString& text) { // 更新显示和处理输入文本 }); layout->addWidget(lineEdit); } void NineGridInput::keyPressEvent(QKeyEvent* event) { if (event->key() == Qt::Key_Return) { // 处理确认键 } else { // 根据按键ID,更新选中的按键并插入对应字符 emit inputCharacter(event->key()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

草上爬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值