news 2026/4/18 10:43:36

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/17 19:47:30

Carrot浏览器扩展:实时预测Codeforces竞赛评级变化的利器

Carrot浏览器扩展&#xff1a;实时预测Codeforces竞赛评级变化的利器 【免费下载链接】carrot A browser extension for Codeforces rating prediction 项目地址: https://gitcode.com/gh_mirrors/carrot1/carrot 在编程竞赛的世界里&#xff0c;Codeforces作为全球知名…

作者头像 李华
网站建设 2026/4/18 4:30:03

粉丝经济变现新模式:售卖喜爱博主的AI声线使用权

粉丝经济的新玩法&#xff1a;用你喜欢的博主声音做内容&#xff0c;合法吗&#xff1f;可行吗&#xff1f; 在B站刷视频时有没有想过——如果能用李佳琦的声音念你写的段子&#xff0c;或者让罗翔老师以“愤怒”语气吐槽食堂饭菜&#xff0c;会有多离谱又多有趣&#xff1f;这…

作者头像 李华
网站建设 2026/4/18 4:31:32

多国语言广告投放:统一品牌形象下的语音适配

多国语言广告投放&#xff1a;统一品牌形象下的语音适配 在全球化内容传播日益频繁的今天&#xff0c;品牌出海早已不是简单地把中文文案翻译成英文或日文。真正的挑战在于——如何让一个声音&#xff0c;在纽约、东京、首尔和巴黎的消费者耳中听起来都像是“同一个代言人”&am…

作者头像 李华
网站建设 2026/4/18 8:29:17

出版社数字化转型:快速将纸质书转为音频书

出版社数字化转型&#xff1a;快速将纸质书转为音频书 在数字内容消费日益多元的今天&#xff0c;越来越多读者不再满足于“读”书——他们更愿意在通勤、健身或睡前“听”一本书。全球有声书市场正以超过20%的年复合增长率迅猛扩张&#xff0c;而传统出版社却仍困于高昂的配音…

作者头像 李华
网站建设 2026/4/18 5:44:38

儿童故事音频制作:IndexTTS 2.0温暖声线情感演绎

儿童故事音频制作&#xff1a;IndexTTS 2.0温暖声线情感演绎 在智能音箱里播放睡前故事的夜晚&#xff0c;你是否曾希望那声音是来自奶奶的轻语&#xff1f;当孩子问“妈妈&#xff0c;你能把《小王子》读给我听吗&#xff1f;”而父母疲惫不堪时&#xff0c;有没有一种技术能复…

作者头像 李华
网站建设 2026/4/18 3:48:02

宠物咖啡馆平台设计与实现 Spring Boot项目实战开发 代码答疑

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

作者头像 李华