news 2026/4/15 11:20:11

QBoxLayout支持水平布局和垂直布局构建一个键盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QBoxLayout支持水平布局和垂直布局构建一个键盘

QBoxLayout

能支持水平布局和垂直布局,

然而键盘的左侧字母区,

键盘大小参差不齐,

用盒子布局再适合不过了。

1 成品示例

2 代码实现

为了使键盘能支持放大缩小,

且能保持键盘的布局不乱,

所以代码中用了满满当当的stretch

且看代码实现:

// 第一行 QHBoxLayout *hBox0 = new QHBoxLayout; hBox0->setMargin(0); hBox0->setSpacing(0); QStringList line0 = {"ESC", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"}; for (int i = 0; i < line0.size(); ++i) { QPushButton *btn = new QPushButton(line0.at(i)); btn->setMinimumSize(60,60); btn->setMaximumSize(6000,6000); hBox0->addWidget(btn, 2); if(line0.at(i) == "ESC") hBox0->addStretch(2); else if(line0.at(i) == "F4" || line0.at(i) == "F8") hBox0->addStretch(1); } //第二行 QHBoxLayout *hBox1 = new QHBoxLayout; hBox1->setMargin(0); hBox1->setSpacing(0); QStringList line1 = {"`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0","-","=","←"}; for (int i = 0; i < line1.size(); ++i) { QPushButton *btn = new QPushButton(line1.at(i)); btn->setMinimumSize(60,60); btn->setMaximumSize(6000,6000); if(i != line1.size() - 1) hBox1->addWidget(btn, 1); else hBox1->addWidget(btn, 2); } //第三行 QHBoxLayout *hBox2 = new QHBoxLayout; hBox2->setMargin(0); hBox2->setSpacing(0); QStringList line2 = {"Tab", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P","[","]","\\"}; for (int i = 0; i < line2.size(); ++i) { QPushButton *btn = new QPushButton(line2.at(i)); btn->setMinimumSize(60,60); btn->setMaximumSize(6000,6000); if(line2.at(i) == "Tab" || line2.at(i) == "\\") hBox2->addWidget(btn, 3); else hBox2->addWidget(btn, 2); } //第四行 QHBoxLayout *hBox3 = new QHBoxLayout; hBox3->setMargin(0); hBox3->setSpacing(0); QStringList line3 = {"Caps Lock", "A", "S", "D", "F", "G", "H", "J", "K", "L", ";", ".", "Enter"}; for (int i = 0; i < line3.size(); ++i) { QPushButton *btn = new QPushButton(line3.at(i)); btn->setMinimumSize(60,60); btn->setMaximumSize(6000,6000); if(line3.at(i) == "Caps Lock") hBox3->addWidget(btn, 21); else if(line3.at(i) == "Enter") hBox3->addWidget(btn, 26); else hBox3->addWidget(btn, 12); } //第五行 QHBoxLayout *hBox4 = new QHBoxLayout; hBox4->setMargin(0); hBox4->setSpacing(0); QStringList line4 = {"Shift", "Z", "X", "C", "V", "B", "N", "M", ",", ".", "/", "Shift"}; for (int i = 0; i < line4.size(); ++i) { QPushButton *btn = new QPushButton(line4.at(i)); btn->setMinimumSize(60,60); btn->setMaximumSize(6000,6000); if(i == 0) hBox4->addWidget(btn, 27); else if(i == line4.size()-1) hBox4->addWidget(btn, 32); else hBox4->addWidget(btn, 12); } //第六行 QHBoxLayout *hBox5 = new QHBoxLayout; hBox5->setMargin(0); hBox5->setSpacing(0); QStringList line5 = {"Ctrl", "Win", "Alt", "", "Alt", "Fn", "Menu", "Ctrl"}; for (int i = 0; i < line5.size(); ++i) { QPushButton *btn = new QPushButton(line5.at(i)); btn->setMinimumSize(60,60); btn->setMaximumSize(6000,6000); if(line5.at(i).isEmpty()) hBox5->addWidget(btn, 74); else hBox5->addWidget(btn, 15); } //垂直布局 QVBoxLayout *vBox = new QVBoxLayout; vBox->setMargin(0); vBox->setSpacing(0); vBox->addLayout(hBox0, 2); vBox->addStretch(1); vBox->addLayout(hBox1, 2); vBox->addLayout(hBox2, 2); vBox->addLayout(hBox3, 2); vBox->addLayout(hBox4, 2); vBox->addLayout(hBox5, 2); this->setLayout(vBox);

大概就是先创建水平布局,

最后把这六个水平布局丢到垂直布局中,

唯一麻烦的地方就是要算好按钮比例。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 10:18:46

Unity游戏多语言翻译插件:一键解决游戏语言障碍的终极方案

Unity游戏多语言翻译插件&#xff1a;一键解决游戏语言障碍的终极方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂外文游戏而苦恼吗&#xff1f;想畅玩全球精品Unity游戏却被语言问题困扰…

作者头像 李华
网站建设 2026/4/11 13:24:29

洛雪音乐六音音源完美修复指南:3步解决播放问题

洛雪音乐六音音源完美修复指南&#xff1a;3步解决播放问题 【免费下载链接】New_lxmusic_source 六音音源修复版 项目地址: https://gitcode.com/gh_mirrors/ne/New_lxmusic_source 还在为洛雪音乐升级后无法使用六音音源而困扰吗&#xff1f;这个简单教程将帮你快速解…

作者头像 李华
网站建设 2026/4/15 10:50:47

临时文件自动化管理方案:Windows 11 系统冗余文件智能清理脚本

一、方案概述 随着 Windows 11 系统的日常使用&#xff0c;各类临时文件、缓存数据、下载残留等冗余文件会不可避免地积累。这些文件不仅占用宝贵的磁盘空间&#xff0c;导致系统响应变慢、启动时间延长&#xff0c;还可能在某些情况下引发程序冲突或系统不稳定。 手动清理这…

作者头像 李华
网站建设 2026/4/11 8:51:41

Windows平台5分钟搞定Poppler:PDF处理终极配置手册

Windows平台5分钟搞定Poppler&#xff1a;PDF处理终极配置手册 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows系统配置PDF处理工具而…

作者头像 李华
网站建设 2026/4/12 13:06:10

用户脚本管理平台高可用架构设计与实践

用户脚本管理平台高可用架构设计与实践 【免费下载链接】scriptcat 脚本猫&#xff0c;一个可以执行用户脚本的浏览器扩展 项目地址: https://gitcode.com/gh_mirrors/sc/scriptcat 在当今互联网环境中&#xff0c;用户脚本管理平台作为浏览器功能扩展的核心组件&#x…

作者头像 李华
网站建设 2026/4/11 17:39:45

终极显卡配置神器:NVIDIA Profile Inspector 完全掌控指南

终极显卡配置神器&#xff1a;NVIDIA Profile Inspector 完全掌控指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要彻底释放你的NVIDIA显卡性能潜力吗&#xff1f;NVIDIA Profile Inspector这款…

作者头像 李华