news 2026/6/11 3:33:59

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/6/10 6:23:20

2026本科生必看!10个降AI率工具测评榜单

2026本科生必看&#xff01;10个降AI率工具测评榜单 2026年本科生降AI率工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着高校对学术原创性的要求日益严格&#xff0c;AIGC检测技术不断升级&#xff0c;传统的“同义词替换”方法已难以满足降AI率的需求。许多学生在…

作者头像 李华
网站建设 2026/6/10 6:23:16

G-Helper终极指南:华硕笔记本性能优化的轻量级利器

G-Helper终极指南&#xff1a;华硕笔记本性能优化的轻量级利器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: …

作者头像 李华
网站建设 2026/6/10 7:54:59

GHelper:让ROG笔记本告别臃肿,重获性能自由

GHelper&#xff1a;让ROG笔记本告别臃肿&#xff0c;重获性能自由 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…

作者头像 李华
网站建设 2026/6/9 21:30:16

DownKyi完整教程:一站式掌握B站视频下载技巧

DownKyi完整教程&#xff1a;一站式掌握B站视频下载技巧 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 …

作者头像 李华
网站建设 2026/6/10 7:52:28

智慧医疗管理系统设计与实现 毕业设计 毕业论文

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

作者头像 李华
网站建设 2026/6/10 7:56:34

Google Cloud Text-to-Speech对比:IndexTTS更懂中文语境

Google Cloud Text-to-Speech对比&#xff1a;IndexTTS更懂中文语境 在短视频、虚拟主播和有声内容爆发的今天&#xff0c;语音合成早已不再是“把文字念出来”那么简单。观众对声音的情绪张力、节奏把控甚至音画同步精度的要求越来越高——一句旁白慢了半秒&#xff0c;可能就…

作者头像 李华