100行代码写一个简易QT点名程序

照例演示一下:

分享一个简易的Qt点名程序,满打满算一百行代码(还要什么自行车)。

UI界面比较丑,按钮是自己做的,背景是AI作画生成的,大家可以自行更换背景以及按钮。

内容也是非常的简单,就是一个点名的程序,当然了,你要改成什么今晚吃什么之类的那也是可以的。

背景图片:

重写主窗口的绘图事件,在窗口初始化的时候系统会自动执行一边,所以我们在绘图事件里把背景图片贴上去,也比较简单,不多说,直接参考下面的代码:

void RollCall::paintEvent(QPaintEvent* e) {QPainter* pain = new QPainter(this);QPixmap background;QPixmap nameback;nameback.load(":/image/nameback.png");background.load(":/image/background.png");background = background.scaled(800, 500, Qt::KeepAspectRatio);nameback = nameback.scaled(800, 80);pain->drawPixmap(0, 0, background);pain->drawPixmap(0, 130, nameback);pain->end();
}

点名花名册:

那既然要点名,就要花名册,而我们不能把数据写死在程序里,因此我们可以使用读取文件的方式来获取花名册(要改成从数据库里获取也是可以的)。

程序一开始如果找不到花名册,则需要提示找不到文件,并且要退出程序,否则会发生异常,因为根本没有名单,那我们还点什么名。

 读取文件直接使用Qt的QFile(本来是就打算用C++原生的文件操作的,但是和Qt配合的话,类型转换有些麻烦,因此直接用Qt的文件操作类 )。

判断文件是否读取成功,如果读取失败我们就弹出一个模态对话框,在对话框被关闭后,直接关闭程序。

然后我这里设定的是文件里一行就是一个人名(这样比较省事,要改成用空格隔开的话也行,另外再在这边改改就行)。

然后每读取一行(一个人名),就存到程序的一个QVector里。

void RollCall::initNames() {    //获取名单,存入到程序里的缓存中QFile input("./names.txt");if (!input.exists()) {QDialog* d = new QDialog(this);d->setFixedSize(500, 200);QLabel* l = new QLabel(QString::fromLocal8Bit("找不到对应的 names.txt 文件\n请配置好对应文件"), d);d->exec();exit(0);}input.open(QIODevice::ReadOnly);//只读模式QString name;while (!input.atEnd()) {//判断是否读到文件尾name = input.readLine(); //按行读,追加qDebug() << name << endl;names.append(name);}input.close();
}

抽个幸运儿:

我们直接搞一个QLabel来把抽到的人名放上去,为了模拟出动态抽取的效果,我们要在按下暂停键之前,每隔一小段时间就更新一下显示的名字,直到按下暂停键就停止抽取效果,所以我们使用定时器,我这里设定的是每20ms抽一次,所以就是一秒抽50次,具体可以根据情况来修改。

void RollCall::timerEvent(QTimerEvent* event) { //定时器任务std::uniform_int_distribution<int>u(0, names.size() - 1);   //生成随机数QString checkedPeople = names[u(e)];    //随机抽取一个名单里的名字luckydog->setText(checkedPeople);       //修改QLabel里的文字
}

 然后我们是使用按钮来控制是否开启定时器(抽取效果),并且如果按钮是“开始”,那么按下之后按钮就要变成“暂停”,如果按下前是“暂停”,那么按下之后就要变成“开始 ”。

void RollCall::initButton() {   //初始化按钮QPushButton* begin = new QPushButton(this);begin->setIcon(QIcon(":/image/begin.png"));begin->move(350, 300);begin->resize(100, 80);begin->setIconSize(QSize(100, 80));connect(begin, &QPushButton::clicked, [=] {if (startFlag) {startFlag = false;begin->setIcon(QIcon(":/image/begin.png")); //切换按钮killTimer(TimerID); //关闭定时器}else {startFlag = true;begin->setIcon(QIcon(":/image/stop.png"));  //切换按钮TimerID = startTimer(20);   //开启定时器}});
}

小结:

主要的功能就这些,菜单栏的部分可有可无,我这里就不多赘述了。

可以根据自己的需求来修改。

完整的代码可以直接在CSDN免费下载,我已经上传到CSDN了。

也可以关注我的微信公众号:折途想要敲代码,回复“qt点名”免费领取。

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

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

相关文章

Jmeter接口/性能测试,Jmeter使用教程(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、线程组 线程组…

代码随想录算法训练营第二十二天 | 读PDF复习环节2

读PDF复习环节2 本博客的内容只是做一个大概的记录&#xff0c;整个PDF看下来&#xff0c;内容上是不如代码随想录网站上的文章全面的&#xff0c;并且PDF中有些地方的描述&#xff0c;是很让我疑惑的&#xff0c;在困扰我很久后&#xff0c;无意间发现&#xff0c;其网站上的讲…

Modbus tcp转ETHERCAT网关modbus tcp/ip协议

捷米JM-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中&#xff0c;实现两种不同协议设备之间的通讯。这个网关能够大大提高工业生产的效率和生产效益&#xff0c;让生产变得更加智能化。捷米JM-ECT-TCP 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要功能是…

ARM day8 key1/2/3led

key_led.h #ifndef _KEY_H_ #define _KEY_H_#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//EXTI编号 typedef enum {EXTI0,EXTI1,EXTI2,EXTI3,EXTI4,EXTI5,…

设计模式-备忘录模式在Java中使用示例-象棋悔棋

场景 备忘录模式 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤&#xff0c;当新的状态无效 或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原&#xff0c;当前很多软件都提供了撤销(Undo)操作&#xff0…

【Linux多线程】详解线程控制、线程分离

线程互斥与同步 &#x1f478; 理解线程&#x1f934;pthead_t&#x1f977;关于线程&#x1f9b8;‍♀️线程控制POSIX线程库线程ID及进程地址空间布局 &#x1f9b8;线程分离__thread关键字&#x1f9b8;‍♂️pthread_detach函数&#x1f9b9;‍♀️pthread_exit函数&#x…

Bean的作用域和生命周期

1. Bean的作用域 Bean作用域定义了对象实例在应用程序中的生命周期和访问范围&#xff0c;⽐如 singleton 单例作⽤域&#xff0c;就 表示 Bean 在整个 Spring 中只有⼀份&#xff0c;它是全局共享的&#xff0c;那么当其他⼈修改了这个值之后&#xff0c;那么另⼀ 个⼈读取到…

【LeetCode】102.二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a; …

【小梦C嘎嘎——启航篇】类和对象(上篇)

【小梦C嘎嘎——启航篇】类和对象&#xff08;上篇&#xff09;&#x1f60e; 前言&#x1f64c;什么是面向过程&#xff1f;什么是面向对象&#xff1f;什么是类和对象类中的访问权限属性类的大小计算this 指针构造函数析构函数 总结撒花&#x1f49e; &#x1f60e;博客昵称&…

Node.js介绍;浏览器和Node.j架构区别;Node的安装与管理;JS代码执行方式;Node的输入与输出;全局对象;

目录 1_Node.js介绍1.1_概念1.2_浏览器和Node.j架构区别1.3_Node.js应用场景 2_Node的安装与管理2.1_安装2.2_Node的版本工具2.3_版本管理工具&#xff1a;n 3_JavaScript代码执行4_Node的输入与输出4.1_REPL4.2_Node程序传递参数4.3_Node的输出 5_全局对象5.1_常见的全局对象5…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-1:任务)

学习之路主要为FreeRTOS操作系统在STM32F103&#xff08;STM32F103C8T6&#xff09;上的运用&#xff0c;采用的是标准库编程的方式&#xff0c;使用的IDE为KEIL5。 注意&#xff01;&#xff01;&#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

大数据实时链路备战 —— 数据双流高保真压测 | 京东云技术团队

一、大数据双流建设 1.1 数据双流 大数据时代&#xff0c;越来越多的业务依赖实时数据用于决策&#xff0c;比如促销调整&#xff0c;点击率预估、广告分佣等。为了保障业务的顺利开展&#xff0c;也为了保证整体大数据链路的高可用性&#xff0c;越来越多的0级系统建设双流&…

java之juc

juc是java.util.current的简写&#xff0c;意思是并发编程。 锁是什么&#xff1f;如何判断锁的是谁&#xff1f; 生产者和消费者问题 synchronized版本 package com.demo.juc.pc;/*** 线程之间的通信问题&#xff0c;生产者和消费者问题&#xff01;* 线程交替执行** a b …

ubuntu初始化/修改root密码

1.登录ubuntu后&#xff0c;使用sudo passwd root命令&#xff0c;进行root密码的初始化/修改&#xff0c;注&#xff1a;这里需要保证两次输入的密码都是同一个&#xff0c;才可成功 ubuntugt-ubuntu22-04-cmd-v1-0-32gb-100m:~/ocr$ sudo passwd root New password: Retype…

Docker 安全 Docker HTTPS请求过程与配置

Docker 容器安全注意点 尽量别做的事 尽量不用 --privileged 运行容器&#xff08;授权容器root用户拥有宿主机的root权限&#xff09; 尽量不用 --network host 运行容器&#xff08;使用 host 网络模式共享宿主机的网络命名空间&#xff09; 尽量不在容器中运行 ssh 服务 尽…

文件按关键字分组-切割-染色-写入excel

1. 背景 针对下面的文件data.csv&#xff0c;首先根据fid进行排序&#xff0c;然后分组&#xff0c;使相同fid的记录放到同一个excel文件中&#xff0c;并对每列重复的数据元素染上红色。 fid,user_id -1000078398032092029,230410010036537520 -1000078398032092029,23042301…

Gitlab 备份与恢复

备份 1、备份数据&#xff08;手动备份&#xff09; gitlab-rake gitlab:backup:create2、备份数据&#xff08;定时任务备份&#xff09; [rootlocalhost ]# crontab -l 00 1 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 说明&#xff1a;每天凌晨1点备份数据…

什么是 HTTP 长轮询?

什么是 HTTP 长轮询&#xff1f; Web 应用程序最初是围绕客户端/服务器模型开发的&#xff0c;其中 Web 客户端始终是事务的发起者&#xff0c;向服务器请求数据。因此&#xff0c;没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。 为…

Docker 全栈体系(八)

Docker 体系&#xff08;高级篇&#xff09; 六、Docker轻量级可视化工具Portainer 1. 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 2. 安装 官网 https://www.portain…

计算机视觉常用数据集介绍

1 MINIST MINIST 数据集应该算是CV里面最早流行的数据了&#xff0c;相当于CV领域的Hello World。该数据包含70000张手写数字图像&#xff0c;其中60000张用于train&#xff0c; 10000张用于test&#xff0c; 并且都有相应的label。图像的尺寸比较小&#xff0c; 为28x28。 数…