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

news2024/9/21 20:35:26

照例演示一下:

分享一个简易的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.coloradmin.cn/o/811968.html

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

相关文章

JWT登录认证

JWT认证流程 跨域认证解决方案&#xff0c;JWT的流程为&#xff1a; 客户端发送账号和密码请求服务端收到请求&#xff0c;验证用户名密码是否通过验证成功后&#xff0c;服务端会生成唯一的token&#xff0c;将其返回给客户端客户端收到token&#xff0c;会将其存储在cookie…

拓扑排序详解(带有C++模板)

目录 介绍&#xff1a; 实现原理&#xff1a; 简答来说&#xff1a; 例子 模板&#xff08;C&#xff09; 介绍&#xff1a; 拓扑排序&#xff08;Topological Sorting&#xff09;是一种针对有向无环图&#xff08;DAG&#xff09;的节点进行排序的算法。DAG是一个图&…

Android 之 使用 MediaRecord 录音

本节引言 本节是Android多媒体基本API调用的最后一节&#xff0c;带来的是MediaRecord的简单使用&#xff0c; 用法非常简单&#xff0c;我们写个例子来熟悉熟悉~ 1.使用MediaRecord录制音频 运行结果&#xff1a; 实现代码&#xff1a; 布局代码&#xff1a;activity_main.…

自动化测试如何做?真实企业自动化测试流程,自动化测试分类...

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

一文讲清楚地图地理坐标系

前言 我最近在做一个和地图有关的项目&#xff0c;这里本人地图采用的是mapbox&#xff0c;其中涉及一个功能需要根据用户输入的地点直接定位到地图上的对应的位置&#xff0c;本人开始想的是直接调用百度的接口根据地名直接获取坐标&#xff0c;发现在地图上的位置有偏移不够…

C++——模板的作用2:特例化

目录 模板的形式&#xff1a; 一.模板的多参数应用&#xff1a; 例&#xff1a; 错误使用1&#xff1a;使用不标准的模板形参表 ​编辑 错误使用2&#xff1a;使用变量作为实参传递给函数模板 二.模板的特例化&#xff1a; 类模板&#xff1a; 针对模板的特化步骤&am…

乌班图22.04安装wireguard实现异地组网

1. 前言&#xff1a; wireguard是新型的异地组网工具&#xff0c;在此之前&#xff0c;又已经被抛弃的pptp&#xff0c;l2tp&#xff0c;有配置复杂的openvpn&#xff0c;wireguard被linux作者linus赞叹优雅&#xff0c;于linux 5.6合并至linux内核主线。 2. 安装过程&#…

文心一言 VS 讯飞星火 VS chatgpt (68)-- 算法导论6.5 7题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;68&#xff09;-- 算法导论6.5 7题 七、试说明如何使用优先队列来实现一个先进先出队列&#xff0c;以及如何使用优先队列来实现栈(队列和栈的定义见 10.1 节。) 文心一言&#xff1a; 优先队列是一种数据结构&#xff0c;其中…

干货|一次完整的性能测试,测试人员需要做什么?

作者介绍 邓宝菊&#xff08;Kiki Deng&#xff09;&#xff0c;10 年软件测试经验&#xff0c;4 年团队管理经验&#xff0c;当前任职研发部架构质量工程部&#xff0c;整体负责研发部测试团队的效能、工具流程建设和人才培养。 前言 一、 规范性能测试实施流程的意义 规范…

Qt: 查看qmake相关参数设置

Qt开发中&#xff0c;经常会遇到qmake相关问题&#xff0c;比如同时安装了多个Qt版本的情况。比如我的情况是系统自带了Qt 5.12.8, 但是开发中遇到一些兼容性问题&#xff0c;于是又手动安装了5.9.8。 查看qmake版本&#xff0c;qmake -v, 虽然项目中已经指定了5.9.8, 但是系统…

通过String字符生成base64编码在生成图片

* base64转图片 //对字节数组字符串进行Base64解码并生成图片 * param base64str base64码 * return // param savePath 图片路径private static final String savePath"image_ver\\verifyCode"; 判断是否为base64编码 public static void mainDD…

关闭深度学习训练/推理进程的方法

引言 设想有一种情况&#xff0c;在ssh服务器训练/推理的时候&#xff0c;突然断线&#xff0c;再次打开ssh的时候&#xff0c;发现后台在运行&#xff0c;此时无法使用 ctrlc 终止&#xff0c;从而&#xff0c;可以用一个很简单的办法来结束&#xff1a;手动关闭进程。 方法 输…

python中如何记录日志?

日志是一种可以追踪某些软件运行时所发生事件的方法。一条日志信息对应的是一个事件的发生&#xff0c;而一个事件通常需要包括以下几个内容&#xff1a;事件发生时间、事件发生位置、事件的严重程度--日志级别、事件内容。 logging模块定义的函数和类为应用程序和库的开发实现…

Python-Python基础综合案例——数据可视化 - 动态柱状图

版本说明 当前版本号[20230729]。 版本修改说明20230729初版 目录 文章目录 版本说明目录知识总览图Python基础综合案例——数据可视化 - 动态柱状图案例效果基础柱状图通过Bar构建基础柱状图反转x和y轴将数值标签放在右侧 基础时间线柱状图创建时间线自动播放时间线设置主题…

基于FPGA的VGG16卷积神经网络加速器--WL

VGG16是一个典型的卷积神经网络&#xff0c;由13层卷积层&#xff0c;5层池化层和3层全连接层组成。且卷积层的计算时间在整个计算过程中占比极大&#xff0c;通过FPGA的并行运算可以有效的加快卷积层的计算速度。 一个卷积层可以有若干个卷积核&#xff0c;以第一层为例&#…

NetSuite 工单超额完工

用户问题 在报工时&#xff0c;完工数量能否超过工单上的计划数量&#xff1f; 解决方法 在制造相关的参数中&#xff0c;有一个参数控制: ALLOW OVERAGE ON WORK ORDER TRANSACTIONS •Check On允许超出工单计划数量 •Check Off不允许超出工单计划数量 Demo 工单计划数量…

前缀和拆分

前缀和 前缀和&#xff1a;一段序列里的前n项和 给出n个数&#xff0c;在给出q次问询&#xff0c;每次问询给出L、R&#xff0c;快速求出每组数组中一段L至R区间的和 给出一段数组&#xff0c;每次问询为求出l到r区间的和 普通方法&#xff1a;L到R进行遍历&#xff0c;那么…

Python-ElasticSearch客户端的封装(聚合查询、统计查询、全量数据)

目录 ES Python客户端介绍封装代码测试代码参考 ES Python客户端介绍 官方提供了两个客户端elasticsearch、elasticsearch-dsl pip install elasticsearchpip install elasticsearch-dsl第二个是对第一个的封装&#xff0c;类似ORM操作数据库&#xff0c;可以.filter、.group…

EverEdit的一些特殊使用教学(持续更新)

项目场景&#xff1a; EverEdit的使用经常一问三不知 搜也搜不到 解决方案&#xff1a; 先去EverEdit在线帮助文档看一下(附链接) EverEdit在线帮助文档 1.快速排序 使用快捷键时:若是小键盘&#xff0c;请同时按住fn键&#xff08;在最左下角的ctrl旁&#xff09;

220. 存在重复元素 III

220. 存在重复元素 III 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;TreeSetsequenceSet.ceilingjava中的红黑树 参考代码&#xff1a; 原题链接&#xff1a; 220. 存在重复元素 III https://leetcode.cn/problems/contains-duplicate-iii/description/ 完…