钾肥喵的窝

我在 CODING 部署的 Hexo 博客

0%

Qt制作随机点名器

发生甚么事了?

噢,原来是左天,一个高中同学问我能不能写个点名器,我说可以.

为什么选Qt

Win32 到处都能跑,但是太麻烦,果断放弃.

MFC 比 Win32 方便一点,但是入门同样麻烦,查了半个小时资料,弃之.

EasyX 容易上手,但是大部分控件需要自己实现,弃之.

Qt 容易上手,工作量小(才不会说是因为方便抄代码和改代码).

点名器的基本原理

我们给每个名字编号,于是点名的过程就变成了一个生成随机数的过程,所以点名器就相当于一个随机数生成器.

界面设计

  1. 新建 mainWindow 项目,(假设)项目名为“ RollCall ”.
    双击 .ui 文件,拖入一个 TextEdit(用于显示文本信息)、两个 PushButton 空间(用于触发和暂停 QTimer 定时器).
    “开始”按钮对象名设置为 start_Btn ,暂停按钮对象名设置为 stop_Btn .

  2. 设置背景,首先在项目中新建一个“.qrc”文件,双击打开,设置前缀(假设)/img,添加资源文件.
    回到设计窗口,修改 MainWindow 的 styleSheet 属性为 background-image:url(“:/img/.“);
    同理,为 textEdit 、 start_Btn 和 stop_Btn 设置背景. 需要注意的是对主窗口的设置对子窗口也会生效,所以建议重新进行设置保证效果.
    这里用了一张半透明的图片当背景实现透明效果(然而懒得搞图床所以并没有图).

文件读写

在mainwindow.h文件下MainWindow类下添加成员函数:void readFile()用于读取 .txt文件.

使用 QString 临时存储一行名字,处理后加入数组.

这里采用不定长数组 QVector 来储存名单,人数通过 count() 获取并储存在 total 中.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void MainWindow::readFile()
{
//构造一个以data1.txt为文件名的QFile对象
QFile file("../RollCall/名单.txt");
//文件以只读方式打开 || 在读取时,将行结束符转换成 \n
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<< "open file failure";
return;
}
else
{
QString array;
while(!file.atEnd()){
//readline(): 读取一行
array = file.readLine();
//trimmed(): 移除字符串两端空白符
array = array.trimmed();
name_list.append(array);
}
total = name_list.count();
}
file.close();
}

计时器与随机数

见参考资料

完整代码

主要参考资料

https://blog.csdn.net/qq_29406323/article/details/81450361