找回密码
 立即注册
收起左侧

一行一行读取文件,并且每行操作之间插入时间间隔

4
回复
7363
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2016-4-26 09:04:20 显示全部楼层 |阅读模式
1Qter豆
网上的例程是这样的:

QFile file("file.txt");

if (!file.open(QIODevice::ReadOnly | QIODevice::Text))

return;

QTextStream in(&file);

QString line1= in.readLine(); //读取第0行文档

QString line2= in.readLine(); //自动读取第1行文档

如果文本有100行,我岂不是要写到line100,请问有没有更好的方法?
时间间隔的问题,我现在的思路使用Sleep()函数,我觉得用Qt的QTime更好,但具体不知道怎么写程序,求大神指点一下。

最佳答案

查看完整内容

QFile file(fileName); if(!file.open(QFile::ReadOnly | QIODevice::Text))//以只读方式打开文件,如果打开失败则返回 return false; QTextStream in(&file); //新建流对象,指向选定的文件 QString str= in.readAll(); file.close(); 就是一次性全部读取
回复

使用道具 举报

累计签到:344 天
连续签到:1 天
2016-4-26 09:04:21 显示全部楼层
陆伟峰 发表于 2016-4-26 17:18
你好,谢谢你的回答。
我现在的思路是定义一个timer,用timeout信号触发读文件readData函数。readData()的 ...

QFile file(fileName);
    if(!file.open(QFile::ReadOnly | QIODevice::Text))//以只读方式打开文件,如果打开失败则返回
        return false;
    QTextStream in(&file);                //新建流对象,指向选定的文件
    QString str= in.readAll();
    file.close();

就是一次性全部读取
回复

使用道具 举报

累计签到:344 天
连续签到:1 天
2016-4-26 09:10:44 显示全部楼层
第一个问题。用Qstringlist来获取。
例如:
QStringList lineList;
    for(int i=0;i<100;i++)
        lineList<<in.readLine();
第二个问题。就是时间信号槽问题。你可以参考霍亚飞的书,或者论坛上的教程。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-4-26 17:17:50 显示全部楼层
本帖最后由 陆伟峰 于 2016-4-26 17:26 编辑
cai901022 发表于 2016-4-26 09:10
第一个问题。用Qstringlist来获取。
例如:
QStringList lineList;

你好,谢谢你的回答。
我现在的思路是定义一个timer,用timeout信号触发读文件readData函数。readData()的定义如下:
void MainWindow::readData(){
    QFile file("E:/qt_projects/newtcpserver/offlinedata.txt");
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
      qDebug()<<"Can't open the file!"<<endl;
    }
    QTextStream in(&file);
    QString line=in.readLine();
    this->tcpSocket->write(line.toLatin1(),line.length());
}
现在的问题是每次调用readData,都只读第一行,我觉得是因为我每次都重新定义了file。要实现自动读取下一行,你有什么好方法没,多谢指导。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-4-26 17:18:49 显示全部楼层
本帖最后由 陆伟峰 于 2016-4-26 17:26 编辑
cai901022 发表于 2016-4-26 09:10
第一个问题。用Qstringlist来获取。
例如:
QStringList lineList;

你好,谢谢你的回答。
我现在的思路是定义一个timer,用timeout信号触发读文件readData函数。readData()的定义如下:
void MainWindow::readData(){
    QFile file("E:/qt_projects/newtcpserver/offlinedata.txt");
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
      qDebug()<<"Can't open the file!"<<endl;
    }
    QTextStream in(&file);
    QString line=in.readLine();
    this->tcpSocket->write(line.toLatin1(),line.length());
}
现在的问题是每次调用readData,都只读第一行,我觉得是因为我每次都重新定义了file。要实现自动读取下一行,你有什么好方法没,多谢指导。

点评

QFile file(fileName); if(!file.open(QFile::ReadOnly | QIODevice::Text))//以只读方式打开文件,如果打开失败则返回 return false; QTextStream in(&file); //新建流对象,指向选  详情 回复 发表于 2016-4-27 08:55
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了