从txt文件中读取一个随机行,然后在QT SDK中对其进行修剪
Reading a random line from a txt file, then trim it in QT SDK
我想请你帮助我的小学校项目。任务是确定一个人的性别(使用2个单选按钮),然后随机选择一个日本姓氏和男性/女性中间名。还有剩下的任务,但与这部分相比,这算不了什么:(问题是,我已经设法使3.txt文件(familynames.txt、maledemiddnames.txt和femaledemiddenames.txt)看起来如下:1、Akiro2、樱花3等。。。
我想做的是创建一个随机数,读取行,直到它到达与我的随机数相同的行,然后去掉数字和逗号,并在相应的标签上显示名称。到目前为止,这就是我所拥有的:
void MainWindow::famname()
{
QString familyname;
int famrand =qrand() % 76;
ui->label_2->setText(QString::number(famrand));
int i = 1;
QFile famfile("C:UsersRysethgyakorlas_familynames.txt");
QTextStream in(&famfile);
if(famfile.open(QIODevice::ReadOnly)){
while (!in.atEnd()) {
QString line = in.readLine();
i++;
if(i==famrand){
QStringList line2 =line.split(',');
familyname = line2.at(0);
ui->label_2->setText(QString::number(famrand)+" "+QString::number(i));
ui->FamilyLabel->setText(familyname);
}//IF
}//WHILE
}//IF
famfile.close();
}//NGEN
如果你们中的任何人能想出某种解决方案,或者如果你有任何建议,请不要急于与我分享:D
谢谢你,祝你度过美好的一天/晚上:Ruben
我认为使用Boost::Spirit::Qi,您可以将文件解析为std::vector< std::string >
,并使用简单的c++方法进行操作。
但为了帮助您的Qt解决方案:
您永远不会检查int famrand =qrand() % 76;
是否产生合法编号,您的文本文件中是否有足够的条目。。。
int i = 1;
这个整数是不必要的,数字在文本文件中。。。
我的解决方案(未经测试):
while (!in.atEnd()) {
QString line = in.readLine();
QStringList list = line.split(",", QString::SkipEmptyParts);
bool ok;
int idx = list.at(0).toInt(&ok);
if (ok && idx == famrand) {
familyname = list.at(1).trimmed();
// ... do with your ui whatever you want
}//IF
}//WHILE
请记住,如果字符串到int的转换失败和/或list throw(list.at(xx)
)的访问者失败,则必须进行错误处理
积极的一面是,你不需要一个有序的文本文件
我真的不明白你在做什么,但在这一行,我想你得到的是数字,而不是家族名称。
familyname = line2.at(0); // number
familyname = line2.at(1); // family name
相关文章:
- Qt VTK交互风格的信号到小部件
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何将QGraphicsItem QList保存到文件中,然后读取它?Qt c++
- Qt读取串行输入,然后将其拆分为单独的变量
- VS2015中内置的程序的发布版本与Qt运行然后关闭没有错误?
- QT-仅用密钥填充QMAP,然后添加每个键的值
- QT创建者的运行应用程序会出现错误QXCBConnection,然后流产
- Qt C++ 如何将加密文本的QByteArray保存到文件中,然后读取并格式化为QByteArray
- 将光标更改为沙漏/等待/忙碌光标,然后返回Qt
- 如何使用信号和插槽从qt表单中获取id,然后在链表中搜索它并使用另一个表单显示结果
- QT读取二进制文件,然后将其转换为QString
- 从txt文件中读取一个随机行,然后在QT SDK中对其进行修剪
- 时序问题:QT写入串行端口,然后读
- Qt:隐藏然后显示QQuickView防止未来的鼠标事件
- Qt websocket发送消息并等待响应,然后再进入下一个方法
- Qt在运行时改变对话框的模式,而不是第一次隐藏它,然后再显示
- Qt c++加载GUI然后加载其他设置
- Qt程序挂起(不响应),直到函数结束,然后再次开始工作