Qt学习09:其他基本小控件

news2025/2/13 5:17:09

文章首发于我的个人博客:欢迎大佬们来逛逛

文章目录

  • QSpinBox
  • QDateTimeEdit
  • QComboBox
  • QSlider
  • QRubberBand

QSpinBox

微调框,可以通过点击增加减小或者输入来调整数据。

请添加图片描述

继承自:QAbstractSpinBox

同时这个类还具有Double类型的版本。

常用操作:

  1. setRange :设置范围
  2. setValue :设置初始值
  3. setWrapping : 设置可以重复,即到达最大值之后可以到达最小值
  4. setSingleStep : 设置每次的移动步数
  5. setPrefix :设置前缀

可以通过重写 父类的 textFromValue 来自定义数据的类型:

class SpinBox :public QSpinBox{
public:
    SpinBox(QWidget* parent=nullptr)
        :QSpinBox(parent){
        strs<<"NULL"<<"一"<<"二"<<"三"<<"四"<<"五"<<"六"<<"日";
    }
    QString textFromValue(int value)const override{

        return strs[value];
    }
private:
    QStringList strs;
};

测试如下:

void Widget::testQSpinBox()
{
    sp=new SpinBox(this);
    sp->setRange(1,7);

    //设置值
    sp->setValue(5);

    //循环
    sp->setWrapping(true);

    //步长
    sp->setSingleStep(1);

    //前缀后缀
    sp->setPrefix("周");
    sp->setSuffix("上学");

    //特殊显示最小值
    sp->setSpecialValueText("最底部!");

    //显示方式:直接看到,干净的
    qInfo()<<sp->text()<<sp->cleanText();
}

QDateTimeEdit

时间日期显示类,并且还可以自己修改时间与日期

请添加图片描述

它也继承自QAbstractSpinBox 本质是一个微调框

常用操作如下:

使用QDateTime::currentDateTime()来获取当前时间日期。

void Widget::testQDateTimeEdit()
{
    dt=new QDateTimeEdit(this);

    //设置当前时间
    dt->setDateTime(QDateTime::currentDateTime());

    //设置显示格式
    dt->setDisplayFormat("yyyy年MM月dd日-hh时mm分ss秒");

    //获取某段数值
    qInfo()<<dt->sectionCount()<<dt->sectionAt(2)<<dt->sectionText(dt->sectionAt(2));

    //日历弹出
    dt->setCalendarPopup(true);
}

如果我们要做一个钟表,即每时每刻我们的时间都要发生变化,则可以使用一个定时器来对这个控件的显示进行刷新:

QTimer* dateTimer=new QTimer(this);
dateTimer->callOnTimeout(this,&Widget::timeGoOn);
dateTimer->start(100);

...

public slots:
	void Widget::timeGoOn()
	{
	    //时间流逝
		   dt->setDateTime(QDateTime::currentDateTime());
	}

QComboBox

这是一个下拉框,可以下拉选择某个内容

请添加图片描述

它继承自:QWidget

常用操作:

  1. addItem:添加项目
  2. currentIndex/currentText:获取当前选择的索引或者文本。
  3. insertItem:给定一个索引,在这个位置插入一个新的项目
  4. itemData:返回某个索引所代表的数据
  5. setEditable:可以编辑并且插入
  6. setSizeAdjustPolicy:可以根据调整下拉框的尺寸,取决于QComboBox::SizeAdjustPolicy
  7. setItemData:设置项目所代表的数据。

常用信号:

  1. currentIndexChanged:获取当前选择的项目的索引。
  2. currentTextChanged:获取当前选择的文本

代码:

测试了基本功能,以及可以通过选择某个项目来获得这个项目所代表的数据内容。

void Widget::testQComboBox()
{
    cbx=new QComboBox(this);
    //currentData

    QStringList datas{"北京","成都","济南","西安","沈阳","杭州","南京"};
    QStringList itemDatas{"北京市","四川省","山东省","陕西省","辽宁省","浙江省","江苏省"};
    cbx->addItems(datas);
    for (int i=0;i<datas.count();i++){
        cbx->setItemData(i,itemDatas[i]);
    }
		//获取项目映射的值
    connect(cbx,&QComboBox::currentIndexChanged,this,[=](int index){
        qInfo()<<"当前选择: "<<cbx->currentText()<<cbx->currentData().toString();
    });

    //可以编辑插入
    cbx->setEditable(true);

    //可以重复
    //cbx->setDuplicatesEnabled(true);

    //根据内容调整尺寸
    cbx->setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy::AdjustToContents);

    return;
		//基本插入函数
    cbx->addItem("唱跳");
    cbx->addItem("RAP");
    cbx->addItem("篮球");
    cbx->addItem(style()->standardIcon(QStyle::StandardPixmap::SP_DirHomeIcon),"吃鸡");
    cbx->insertSeparator(4);
    cbx->addItems(QStringList{"蔡徐坤","陈立农","范丞丞"});
}

QSlider

这是一个滑动条

请添加图片描述

它继承自:QAbstractSlider ,一个抽象滑动类。

同样还有QScrollBar和QDial也都是继承自QAbstractSlider 这个抽象类。

他们两个也都是滑动相关的控件。


其构造函数:

我们可以通过Qt::Orientation来指定滑动条的位置:

  1. Qt::Horizontal 是水平的
  2. Qt::Vertical 是竖直的。
QSlider(Qt::Orientation orientation, QWidget *parent = nullptr)

基本函数功能:

  1. setRange:设置范围
  2. setTickInterval:设置刻度
  3. setTickPosition:设置刻度所在的位置

测试代码如下:

void Widget::testQSlider()
{
    //Qt::Orientation::Horizontal
    sld=new QSlider(this);
    sld->setGeometry(100,100,20,100);

    sld->setRange(0,100);
    //手动设置值
    //sld->setValue(50);

    connect(sld,&QSlider::valueChanged,this,[=](int value){
        qInfo()<<value;
    });

    auto sbar=new QScrollBar(this);
    sbar->resize(20,100);

    auto dial=new QDial(this);
    dial->setGeometry(200,200,50,50);
}

QRubberBand

设置一个橡皮条拖拽控件。

请添加图片描述

它继承自:QWidget

具有以下的基本函数:

  1. move:设置位置,我们使用此函数来确定选中范围的起始位置。
  2. setGeometry:设置选中的范围的矩形区域
  3. shape:显示的样式,使用到QRubberBand::Shape
  4. show:必须调用show方法才会显示出来

如何实现这个选中的功能?

我们需要用到鼠标的事件:

  1. mousePressEvent:鼠标点击时记录起始坐标位置
  2. mouseMoveEvent:鼠标移动时更新矩形区域
  3. mouseReleaseEvent:鼠标松开时矩形消失

具体实现如下:

void Widget::mousePressEvent(QMouseEvent *ev)
{
    //橡皮条拖动
    origin=ev->pos(); //保存开始的位置
    rband->setGeometry(QRect(origin,QSize()));
    rband->show();
}

void Widget::mouseMoveEvent(QMouseEvent *ev)
{
    rband->setGeometry(QRect(origin,ev->pos()).normalized());
}

void Widget::mouseReleaseEvent(QMouseEvent *ev)
{
    rband->hide();
    qInfo()<<rband->geometry();
}

小案例:

选中矩形区域,并且矩形区域内所有的多选框都被选中

注意判断是否包含的条件:geometrycontains方法

void Widget::testQRubberBand()
{
    rband=new QRubberBand(QRubberBand::Shape::Line,this);

    //选中按钮
    for (int i=0;i<5;i++){
        for (int j=0;j<5;j++){
            auto chx=new QCheckBox(QString::number(i*5+j),this);
            chx->move(i*50,j*50);
        }
    }
}
void Widget::mousePressEvent(QMouseEvent *ev)
{
    //橡皮条拖动
    origin=ev->pos(); //保存开始的位置
    rband->setGeometry(QRect(origin,QSize()));
    rband->show();
}

void Widget::mouseMoveEvent(QMouseEvent *ev)
{
    rband->setGeometry(QRect(origin,ev->pos()).normalized());
}

void Widget::mouseReleaseEvent(QMouseEvent *ev)
{
    rband->hide();
    qInfo()<<rband->geometry();

    //处理批量点击按钮
    auto lists=this->children();
    for (auto& x:lists){
        auto chx=dynamic_cast<QCheckBox*>(x);
        if (chx && rband->geometry().contains(chx->geometry())){
            chx->setChecked(!chx->isChecked());
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建Scala开发环境

一、Windows上安装Scala 1、到Scala官网下载Scala Scala2.13.10下载网址&#xff1a;https://www.scala-lang.org/download/2.13.10.html 单击【scala-2.13.10.msi】超链接&#xff0c;将scala安装程序下载到本地 2、安装Scala 双击安装程序图标&#xff0c;进入安装向导&…

笔试强训错题总结(二)

笔试强训错题总结&#xff08;二&#xff09; 选择题 下列哪一个是析构函数的特征&#xff08;&#xff09; A. 析构函数定义只能在类体内 B. 一个类中只能定义一个析构函数 C. 析构函数名与类名不同 D. 析构函数可以有一个或多个参数 析构函数可以在类中声明&#xff0c…

np.arange()用法+reshape+np.dot()

1.np.arange()用法 np.arange()函数返回一个有终点和起点的固定步长的排列 # 参数个数情况&#xff1a; np.arange()函数分为一个参数&#xff0c;两个参数&#xff0c;三个参数三种情况 # 1&#xff09;一个参数时&#xff0c;参数值为终点&#xff0c;起点取默认值0&#xff…

SpringBootSecurity 简单明了

在autoConfiguration Jar的imports文件里面有 SecurityFilterAutoConfiguration类&#xff0c;这样springboot会自己加载这个类。 该类的作用是向容器内部注入一个RegisterBean叫DelegatingFilterProxyRegistrationBean&#xff0c;由于它同时实现了ServletContextInitializer接…

Redis问题处理

1、jemalloc/jemalloc.h&#xff1a;没有那个文件或目录 解决方法&#xff1a; 正确解决办法(针对2.2以上的版本) 清理上次编译残留文件&#xff0c;重新编译 make distclean && make

【学术小白如何写好论文】文献综述

文章目录 一、前言1.目的2.作用 二、切入角度三、写作方法 一、前言 前言&#xff1a;在撰写这部分的时候&#xff0c;我们首先要明确文献综述的目的是什么&#xff0c;作用是什么。 1.目的 梳理前人研究的脉络找出前人研究的不足 2.作用 让本研究更充实&#xff0c;告诉读者…

路径规划算法:基于蛾群优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蛾群优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蛾群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蛾群…

SpringSecurity实现前后端分离登录token认证详解

目录 1. SpringSecurity概述 1.1 权限框架 1.1.1 Apache Shiro 1.1.2 SpringSecurity 1.1.3 权限框架的选择 1.2 授权和认证 1.3 SpringSecurity的功能 2.SpringSecurity 实战 2.1 引入SpringSecurity 2.2 认证 2.2.1 登录校验流程 2.2.2 SpringSecurity完整流程 2.2.…

翻译的技巧

400字左右的文章中划出5个句子&#xff0c; 30分钟内将其翻译成中文&#xff0c;分值10分。文章的题材大多是有关政治、经济、文化、教育、科普以及社会生活&#xff0c;议论文为主&#xff0c;说明文为辅&#xff0c;结构严谨&#xff0c;逻辑性强&#xff0c;长难句较多。不仅…

基于深度学习的高精度人脸口罩检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度人脸口罩检测识别系统可用于日常生活中或野外来检测与定位人脸口罩目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的人脸口罩目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

mcu:利用Cortex-M中的DWT实现高精度计时

1、Cortex-M中的DWT 在Cortex-M里面有一个外设叫DWT(Data Watchpoint and Trace)&#xff0c;是用于系统调试及跟踪。 它有一个32位的寄存器叫CYCCNT&#xff0c;它是一个向上的计数器&#xff0c;记录的是内核时钟运行的个数&#xff0c;内核时钟跳动一次&#xff0c;该计数器…

node-red 部署案例指导

配置node-red静态资源目录 找到 node-red 的设置文件 可以在启动日志中看到 以我的为例 C:\Users\fizz\.node-red\settings.js 我们在.node-red目录创建一个static目录。用于存放静态文件。 然后修改setting.js的 httpStatic: ‘C:/Users/fizz/.node-red/static/’, 重启…

探索戴森在科技行业的统治地位:分析其后吹风机的成功

2016年&#xff0c;戴森&#xff08;Dyson&#xff09;公司推出重新定义审美与功能的吹风机Supersonic&#xff0c;定价为3000元&#xff0c;七年来&#xff0c;Supersonic不仅没有因其价格远高于竞品而被市场淘汰&#xff0c;反而稳居国内市场吹风机的“龙头宝座“&#xff0c…

低秩矩阵(Low-Rank)的意义

&#xff11;&#xff0e;回顾基础&#xff1a; 矩阵的秩度量的是矩阵行列之间的相关性&#xff0c;如果各行各列都是线性无关的&#xff0c;矩阵就是满秩。非零元素的行或列决定了秩的大小。&#xff0f;&#xff0f;划重点&#xff0c;秩可以度量矩阵自身相关性 讲个小故事…

调用阿里API实现全国快递物流查询

作者介绍 王梅(姓名)&#xff0c;女&#xff08;性别&#xff09;&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生 研究方向&#xff1a;机器视觉与人工智能 电子邮件&#xff1a;1095647386qq.com 王泽宇&#xff0c;男&#xff0c;西安工程大学电子信息学院…

一文让你轻松拿捏 Spring MVC

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

高完整性系统——霍尔逻辑

文章目录 霍尔三元组案例1案例2 逻辑推导规则forward v.s. backwardforwardbackward rule of assignmentrules of consequence结合上述两个 rulerule of sequencing更大的程序案例skip ruleconditional rule案例 要证明这个程序需要从上往下进行&#xff0c;先单独证明 f:1, i:…

你“被”全链路了么?全链路压测实践之理论

要说当下研发领域最热门的几个词&#xff0c;全链路压测 肯定跑不了。最近的几次大会上&#xff0c;也有不少关于全链路的议题。之前有朋友在面试过程中也有被问到了什么是全链路压测&#xff0c;如何有效的开展全链路压测。今天我们就来聊聊全链路压测&#xff0c;但本文不会涉…

Redis.conf 详解

我们启动 Redis&#xff0c;一般都是通过 Redis.conf 启动。 因此&#xff0c;我们必须了解 Redis.conf 的配置&#xff0c;才能更好理解和使用 Redis。 单位 单位注意事项&#xff1a;当需要内存大小时&#xff0c;可以指定为1k 5GB 4M等 通常形式&#xff1a; 1k > 1000字…

搜索在计算机中的地位十分重要

无论是在内部系统还是在外部的互联网站上&#xff0c;都少不了检索系统。数据是为了用户而服务。计算机在采集数据&#xff0c;处理数据&#xff0c;存储数据之后&#xff0c;各种客户端的操作pc机或者是移动嵌入式设备都可以很好的获取数据&#xff0c;得到 想要的数据服务。 …