首页 > 其他分享 >Qt QToolBox 的常用方法

Qt QToolBox 的常用方法

时间:2024-03-14 13:56:32浏览次数:34  
标签:控件 常用 Qt QToolButton ui pLayout QToolBox new include

在界面上拉一个 Tool Box 控件,和三个按钮控件:

代码如下:

  1 #include "widget.h"
  2 #include "ui_widget.h"
  3 #include <QGroupBox>
  4 #include <QDebug>
  5 #include <QMessageBox>
  6 #include <QToolButton>
  7 #include <QVBoxLayout>
  8 #include <QToolBox>
  9 #include <QLabel>
 10 #include <QHBoxLayout>
 11 #include <QPixmap>
 12  
 13 Widget::Widget(QWidget *parent) :
 14     QWidget(parent),
 15     ui(new Ui::Widget)
 16 {
 17     ui->setupUi(this);
 18     
 19     // 设置边框样式
 20     ui->toolBox->setFrameStyle(QFrame::Panel);
 21     
 22     // 设置图标和文本信息
 23     ui->toolBox->setItemIcon(0, QIcon(":/Image/OnePiece.png"));
 24     ui->toolBox->setItemText(0, "海贼王");
 25     
 26     // 获取控件上 toolbox 的第一个子页
 27     QWidget *widget = ui->toolBox->widget(0);
 28     
 29     // QGroupBox 一般用于分组,作为容器部件使用,在其中可以布置各种窗口部件;
 30     // 但是需要注意的是,内部必须使用布局控件进行布局
 31     QGroupBox *groupBox = new QGroupBox(this);
 32     
 33     // 创建两个 QToolButton 对象
 34     QToolButton *btn1 = CreateToolButton("路飞一号", ":/Image/Luffy.png");
 35     QToolButton *btn2 = CreateToolButton("路飞二号", ":/Image/LuffyQ.png");
 36     
 37     // 创建一个垂直布局控件
 38     QVBoxLayout *pLayout = new QVBoxLayout(groupBox);
 39     pLayout->addWidget(btn1);               
 40     pLayout->addWidget(btn2);             
 41     pLayout->addStretch();                  // 添加一个可拉伸的空间
 42     pLayout->setAlignment(Qt::AlignHCenter);// 设置居中显示  
 43     
 44     // 为控件上 toolbox 的第一个子页设置内容(内容是一个布局)
 45     widget->setLayout(pLayout);
 46 }
 47  
 48 Widget::~Widget()
 49 {
 50     delete ui;
 51 }
 52  
 53 // 创建 QToolButton 控件对象
 54 QToolButton *Widget::CreateToolButton(QString text, QString icon)
 55 {
 56     QToolButton *toolBtn = new QToolButton(this);
 57     toolBtn->setText(text);                                     // 设置文本
 58     toolBtn->setIcon(QIcon(icon));                              // 设置图标
 59     toolBtn->setIconSize(QSize(50, 50));                        // 设置图标大小
 60     toolBtn->setAutoRaise(true);                                // 设置自动提升
 61     toolBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);   // 设置文本在图标下面显示
 62     return toolBtn;
 63 }
 64  
 65 // 添加
 66 void Widget::on_btnAdd_clicked()
 67 {
 68     // QGroupBox 一般用于分组,作为容器部件使用,在其中可以布置各种窗口部件;
 69     // 但是需要注意的是,内部必须使用布局控件进行布局
 70     QGroupBox *groupBox = new QGroupBox(this);
 71     
 72     // 创建几个 QToolButton 对象
 73     QToolButton *btn1 = CreateToolButton("蝴蝶一号", ":/Image/butterfly.png");
 74     QToolButton *btn2 = CreateToolButton("蝴蝶二号", ":/Image/down.png");
 75     QToolButton *btn3 = CreateToolButton("蝴蝶三号", ":/Image/up.png");
 76     
 77     // 创建一个垂直布局控件
 78     QVBoxLayout *pLayout = new QVBoxLayout(groupBox);
 79     pLayout->addWidget(btn1);               
 80     pLayout->addWidget(btn2);               // 将 QToolButton 对象添加到布局中
 81     pLayout->addWidget(btn3); 
 82     pLayout->addStretch();                  // 添加一个可拉伸的空间
 83     pLayout->setAlignment(Qt::AlignHCenter);// 设置居中显示  
 84     
 85     // 将分组好的部件添加到 toolBox 中
 86     ui->toolBox->addItem(groupBox, QIcon(":/Image/butterfly.png"), "蝴蝶");
 87 }
 88  
 89 // 插入:多层布局
 90 void Widget::on_btnInsert_clicked()
 91 {
 92     // QGroupBox 一般用于分组,作为容器部件使用,在其中可以布置各种窗口部件;
 93     // 但是需要注意的是,内部必须使用布局控件进行布局;
 94     QGroupBox *groupBox = new QGroupBox(this);
 95  
 96     // 创建一个用于显示图片的 QLabel
 97 //    QLabel *labImage = new QLabel(this);
 98 //    labImage->resize(50, 50);
 99 //    labImage->setPixmap(QPixmap(":/Image/Luffy.png"));
100 //    labImage->setScaledContents(true); // 设置图片自动拉伸,以适应控件大小
101     
102     // 注意:上面用 QLabel 显示图片,当图片较大时,没有找到方法让图片缩小
103     // 以适应 label 控件大小,上面的方法单独使用有效,但是放到布局中就无效了;
104     // 所以还是使用 QToolButton 控件吧;
105     QToolButton *btnImage = CreateToolButton("万里阳光号", ":/Image/sunny.png");
106     
107     // 创建一个用于显示文字的 QLabel 
108     QLabel *labName = new QLabel(this);
109     labName->setText("船长:路飞");
110     labName->setFont(QFont("宋体", 16));
111     
112     // 创建一个用于显示文字的 QLabel
113     QLabel *labDesc = new QLabel(this);
114     labDesc->setText("口号:我是要成为海贼王的男人!");
115     labDesc->setFont(QFont("宋体", 12));
116     
117     // 先创建一个垂直布局控件:将两个显示文字的 QLabel 放入垂直布局中
118     QVBoxLayout *vLayout = new QVBoxLayout();
119     vLayout->addWidget(labName); 
120     vLayout->addWidget(labDesc);
121     
122     // 再创建一个水平布局控件:将显示图片的 QToolButton 和上面的 垂直布局控件 一起放入水平布局中
123     QHBoxLayout *hLayout = new QHBoxLayout();
124     hLayout->addWidget(btnImage);
125     hLayout->addLayout(vLayout);
126     
127     // 最后再创建一个垂直布局控件:作为 groupBox 中的整体布局
128     QVBoxLayout *pvLayout = new QVBoxLayout(groupBox);
129     pvLayout->addLayout(hLayout);
130     pvLayout->addStretch();
131     pvLayout->setAlignment(Qt::AlignLeft);
132     
133     // 将分组好的部件插入到 toolBox 中
134     ui->toolBox->insertItem(ui->toolBox->count(), groupBox, QIcon(":/Image/sunny.png"), "海贼船");
135 }
136  
137 // 删除
138 void Widget::on_btnDelete_clicked()
139 {
140     // 程序一启动时默认选中的是就 第一项
141     int index = ui->toolBox->currentIndex();
142     qDebug() << QString::number(index);
143     if (index == -1)
144     {
145         QMessageBox::warning(this, "系统提示", "请选择需要删除的项!");
146     }
147     else
148     {
149         if (QMessageBox::question(this, "系统提示", QString("是否要删除第 %1 项?").arg(QString::number(index + 1))) == QMessageBox::Yes)
150         {
151             ui->toolBox->removeItem(index);
152         }
153     }
154 }

程序一启动的时候,就修改 Page 1,并为其添加数据,效果如下:

点击 “添加” 按钮,效果如下:

点击 “插入” 按钮,效果如下:

标签:控件,常用,Qt,QToolButton,ui,pLayout,QToolBox,new,include
From: https://www.cnblogs.com/ybqjymy/p/18072684

相关文章

  • Qt QToolBox tab 文字居中
    背景:在利用QToolBox实现一个简单的抽屉控件/导航控件时,发现QToolBox::tab的标题总是居左。尝试使用text-align属性、subcontrol-xxx属性都不起作用。解决办法:利用padding属性进行"硬编码"。代码片段如下:1//当前窗口的宽度,其中2//TOOLBOXWND_WIDTH:......
  • MogDB openGauss常用查询汇总
    MogDB/openGauss常用查询汇总概述在MogDB/openGauss日常运维过程中,会经常通过SQL来获取想要查看的信息,这些SQL可以作为监控指标、巡检指标,也可以临时查询使用。通过系统线程id查对应的query#!/bin/bashsource~/.bashrcthread_sets=`ps-ef|grep-igaussdb|g......
  • 西门子PLC常用底层逻辑块分享_单/双输出电机
    文章目录前言一、功能概述二、单输出电机程序编写1.创建自定义数据类型2.创建FB功能块“单输出电机”3.编写程序三、双输出电机程序编写1.创建自定义数据类型2.创建FB功能块“双输出电机”3.编写程序前言本文分享一个自己编写的电机控制逻辑块。一、功能概述手......
  • Qt 如何搭建Lua的运行环境
    一、Lua简介Lua是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程(procedural)编程、面向对象编程、函数式编程以及数据描述。Lua是动态类型的,运行速度快,支持自动内存管理,因此被广泛用于配置、脚本编写等场景。二、Lua的优势Lua脚本可以很容易的被C/C++代......
  • 使用Minikube 部署单节点 Kubernetes(K8s)集群通常用于开发环境或测试环境
    部署单节点Kubernetes(K8s)集群通常用于开发环境或测试环境,而不是生产环境,因为在单节点上运行的集群无法提供高可用性保证。以下是一个简化的步骤来在一台机器上部署单节点Kubernetes集群:使用Minikube部署单节点K8sMinikube是一个工具,它使得在本地机器(比如笔记本电脑)上搭建......
  • vscode常用快捷键
    一、vscode的常用快捷键1、注释:a)单行注释:[ctrl+k,ctrl+c]或ctrl+/b)取消单行注释:[ctrl+k,ctrl+u](按下ctrl不放,再按k+u)c)多行注释:[alt+shift+A]d)多行注释:/**2、移动行:alt+up/down3、显示/隐藏左侧目录栏 ctrl+b4、复制当前行:shift+alt......
  • 常用负载均衡详解(图文总结)
    1介绍在互联网场景下,负载均衡(LoadBalance)是分布式系统架构设计中必须考虑的一个环节,它通常是指将负载流量(工作任务、访问请求)平衡、分摊到多个操作单元(服务器、组件)上去执行的过程。目的在于提供负载配比,解决性能、单点故障(高可用)和扩展性(水平伸缩)等问题。以上图为例,随着互......
  • Qt6.0开发 第四章 常用界面组件的使用
    第四章常用界面组件的使用在Qt类库中,所有界面组件类的字节或间接父类都是QWidget.QWidget的父类是QObject与QPaintDevice.所以QWidget是多重继承的类.QObject支持元对象系统,其信号与槽机制为编程中对象间通信提供了极大便利.QPaintDevice是能使用QPainter类在绘图设备上绘......
  • Redis 八种常用数据类型详解
    夯实基础,这篇文章带着大家回顾一下Redis中的8种常用数据类型:5种基础数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。3种特殊数据类型:HyperLogLog(基数统计)、Bitmap(位图)、Geospatial(地理位置)。Redis5种基本数据类型Redis共有5种基本数据类......
  • 开发者导航:分享10个程序员常用的技术社区网站(第一期)
    ​开发者导航:分享10个程序员常用的技术社区网站(第一期)站长收藏了很多个程序员常用的技术网站,这些网站涵盖了代码托管、面试资料、编程语言学习、算法题解、技术问答、技术分享等多个方面,是程序员们学习、交流和提升的重要平台。因为数量比较多,每次分享十个,等不及的同学可以去我......