news 2026/8/22 21:49:26

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/8/21 20:39:30

QGridLayout 网格布局构建一个数字键盘布局

QGridLayout一个方方正正的网格布局&#xff0c;它适合排布那些横平竖直的多行列内容&#xff0c;比如数字键盘&#xff0c;就很适合用网格布局来处理1 成品示例2 代码实现数据键盘有5行4列&#xff0c;每个按键占据一个网格&#xff0c;其中有三个按键不太安分。0键要横跨两列…

作者头像 李华
网站建设 2026/8/21 20:39:25

解锁NVIDIA显卡隐藏性能:5个必学的Profile Inspector实用技巧

解锁NVIDIA显卡隐藏性能&#xff1a;5个必学的Profile Inspector实用技巧 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要让你的NVIDIA显卡发挥出120%的潜力吗&#xff1f;NVIDIA Profile Inspecto…

作者头像 李华
网站建设 2026/8/21 20:39:31

LOL辅助工具League Akari:5大核心功能深度解析与实战应用指南

LOL辅助工具League Akari&#xff1a;5大核心功能深度解析与实战应用指南 【免费下载链接】LeagueAkari ✨兴趣使然的&#xff0c;功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 还…

作者头像 李华
网站建设 2026/8/21 20:39:33

智慧树网课自动化学习解决方案:三步实现高效学习体验

智慧树网课自动化学习解决方案&#xff1a;三步实现高效学习体验 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树网课的繁琐操作而烦恼吗&#xff1f;这款…

作者头像 李华
网站建设 2026/8/21 20:39:32

线下演出售票管理系统开发与实现 毕业设计 毕业论文

阅读提示 博主是一位拥有多年毕设经验的技术人员&#xff0c;如果本选题不适用于您的专业或者已选题目&#xff0c;我们同样支持按需求定做项目&#xff0c;论文全套&#xff01;&#xff01;&#xff01; 博主介绍 CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者…

作者头像 李华
网站建设 2026/8/21 20:39:32

R语言绘制高清图用于论文发表,这些设备无关的分辨率技巧你必须掌握

第一章&#xff1a;R语言论文绘图中的分辨率挑战在学术论文撰写过程中&#xff0c;图表的清晰度直接影响研究成果的呈现质量。R语言作为数据科学领域广泛使用的统计分析工具&#xff0c;其绘图系统&#xff08;如基础绘图、ggplot2等&#xff09;默认输出的图形分辨率往往不足以…

作者头像 李华