这是一个通过Qt实现的单词背诵程序,我将通过几个步骤带你程序实现逻辑
设计思路:
1、按单词的难易程度可将单词进行分级,如1-9级;背诵单词,如遇见不认识的情况需知道中文解释,根据以上信息,我们将设计一个数据结构,如“英文”、“中文”、“等级”
2、根据以上信息,我们可以设计出单词背诵程序的数据存储内容,这里我们采用文本文件进行存储,如“red 红色 1”
3、导入数据,并进行分级处理
4、设计背诵方式,如“背诵中文”、“背诵英文”、“随机背诵中文”、“随机背诵英文”
5、设计识别方式,如“认识”、“不认识”;当点击不认识时,需弹出相对应的中文或者英文
头文件定义:
#include <QWidget>
//单词数据结构体
struct Word
{
QString en;
QString cn;
int level;
};
namespace Ui {
class Recite;
}
class Recite : public QWidget
{
Q_OBJECT
//背诵类型
enum ReciteType
{
//顺序背诵英文
LEVELEN,
//顺序背诵中文
LEVELCN,
//随机背诵英文
RANDEN,
//随机背诵中文
RANDCN
};
public:
explicit Recite(QWidget *parent = 0);
~Recite();
private slots:
void on_btn_importWord_clicked();
void on_btn_levelEn_clicked();
void on_btn_levelCn_clicked();
void on_btn_randCn_clicked();
void on_btn_randEn_clicked();
void on_btn_know_clicked();
void on_btn_unknown_clicked();
void on_btn_next_clicked();
private:
//生成不重复的随机数表
QList<int> genRadNum(int num);
void knowOrNext();
private:
Ui::Recite *ui;
//根据分级后的单词
QList<QList<Word>> m_levelword;
//所有单词
QList<Word> m_allWord;
//背诵类型
ReciteType m_type;
//不重复的随机数表
QList<int> m_randList;
//当前单词索引
int m_index;
//当前等级
int m_level;
};
导入单词数据
void Recite::on_btn_importWord_clicked()
{
QString path = QFileDialog::getOpenFileName(this, "请选择单词文本", "", "*.txt");
if (path.isEmpty())
return;
//清空保存单次的容器
for (int i = 0; i < m_levelword.size(); ++i)
m_levelword[i].clear();
m_levelword.clear();
ui->comboBox_level->clear();
QFile file(path);
if (!file.open(QFile::ReadOnly))
{
QMessageBox::information(this, "提示", "打开单词文本文件失败!");
return;
}
//利用set来保证级数的唯一性
QSet<int> level;
int maxLevel = -1;
//读取文件
while (!file