Qt QString 中Split函数的使用问题

YCMyTot 2015-03-28 04:30:22
问题描述:在一个文件中存放着 3行的数据,第一行为两个字符类型,第二行是两个 int 类型,第三行是一个 int 类型。
测试数据:
P5
384 128
255
然后我就使用 QString 中的 split 函数进行字符串的分割,程序直接崩溃了,找了半天不知道从哪里下手,求教!
   QFile Temp_Read ( "C:/Users/Dell/Desktop/Qt/File_Out/Temp" ) ;
if( !Temp_Read.open( QIODevice::ReadOnly ) )
{
qDebug()<< "文件 Temp 无法被打开!"<<endl ;
}

char *a = (char*)malloc( sizeof(char)*10 ) ;
int i = 0 ;
QTextStream In ( &Temp_Read ) ; // 实际上 这种方法 是错误的,他不向 C++ 一样 , 可以不考虑换行的问题,Qt读取的是字符串
// 在读取字符串之后需要进行字符串的解析。
QString Line ;
QByteArray Temp_Arr ;

// 读取的参数
char top [2] ;
int weight , height , big ;

while( i < 3 )
{
if( 0 == i ) // 当 i = 0 的时候,读取第一行 top[0] , top[1]
{
In.seek( i ) ;
Line = In.readLine();
Line = Line.simplified() ;
Temp_Arr = Line.toLatin1() ;
a = Temp_Arr.data() ;
top[0] = a[0] ;
top[1] = a[1] ;
qDebug() << "top[0] = " << top[0] << endl << "top[1] = " << top[1] << endl ;
}

if( 1 == i ) // 当 i=1 的时候,读取第二行 wieght , height
{
In.seek( i ) ;
Line = In.readLine() ;
QStringList Str_List = Line.split( " " ) ;
Str_List[0] = Str_List[0].simplified() ;
weight = Str_List[0].toInt() ;

Str_List[1] = Str_List[1].simplified() ;
height = Str_List[1].toInt() ;

qDebug() << "Weigth = " << weight << "Height = " << height << endl ;
}

if( 2 == i ) // 当 i=2 的时候,读取第三行 big
{
In.seek( i ) ;
Line = In.readLine() ;
QStringList Str_List = Line.split( " " ) ;
Str_List[0] = Str_List[0].simplified() ;
big = Str_List[0].toInt() ;
qDebug() << "big = " << big << endl ;
}

i++ ;
}


Temp_Read.close();

free( a ) ;


麻烦各位了!
...全文
2726 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
YCMyTot 2015-03-31
  • 打赏
  • 举报
回复
引用 5 楼 foxyz 的回复:
char *a = (char*)malloc( sizeof(char)*10 ) ; a = Temp_Arr.data() ; 以及后边的,楼主,不能这样啊。 看我的代码和结果:
void MainWindow::openFileForTest()
{
    QString fileName=QFileDialog::getOpenFileName(this, tr("Open File"),
                                                               "D:\\Qt\\projects",
                                                               tr("Texts (*.txt)"));

    QFile openedFile(fileName);
    if (openedFile.open(QIODevice::ReadOnly|QIODevice::Text) == false)
    {
        QMessageBox::warning(this,"warning", QString("File (%1) open failed").arg(fileName));
        return;
    }

    QTextStream out(&openedFile);
    while(!out.atEnd())
    {
        ui->plainTextEdit->appendPlainText( out.readLine() );
    }
    openedFile.close();
}
谢谢您了!
YCMyTot 2015-03-31
  • 打赏
  • 举报
回复
引用 6 楼 dext 的回复:
明显不会,之所以会把5读成整数 是因为 你 第一个读的是字符,而不是字符串。 还有 直接 readAll 读会所有 然后 使用str.split(QRegExp("\\s+")) 也能解决问题。 你的思路极其混乱。
引用 4 楼 u014693181 的回复:
我写过这样写,但是结果是错的,把 5 读成了int 类型。往后的结果就读错了!
不好意思哈,刚开始学可能会有点混乱。
dext 2015-03-30
  • 打赏
  • 举报
回复
明显不会,之所以会把5读成整数 是因为 你 第一个读的是字符,而不是字符串。 还有 直接 readAll 读会所有 然后 使用str.split(QRegExp("\\s+")) 也能解决问题。 你的思路极其混乱。
引用 4 楼 u014693181 的回复:
我写过这样写,但是结果是错的,把 5 读成了int 类型。往后的结果就读错了!
donwmufromdying 2015-03-30
  • 打赏
  • 举报
回复
char *a = (char*)malloc( sizeof(char)*10 ) ;
a = Temp_Arr.data() ;
以及后边的,楼主,不能这样啊。

看我的代码和结果:
void MainWindow::openFileForTest()
{
QString fileName=QFileDialog::getOpenFileName(this, tr("Open File"),
"D:\\Qt\\projects",
tr("Texts (*.txt)"));

QFile openedFile(fileName);
if (openedFile.open(QIODevice::ReadOnly|QIODevice::Text) == false)
{
QMessageBox::warning(this,"warning", QString("File (%1) open failed").arg(fileName));
return;
}

QTextStream out(&openedFile);
while(!out.atEnd())
{
ui->plainTextEdit->appendPlainText( out.readLine() );
}
openedFile.close();
}


YCMyTot 2015-03-29
  • 打赏
  • 举报
回复
引用 2 楼 dext 的回复:
QString a; int i1, i2, i3; in >> a >> i1 >> i2 >> i3; 就搞定了吧, 你写的这么麻烦 是什么意思?
我写过这样写,但是结果是错的,把 5 读成了int 类型。往后的结果就读错了!
YCMyTot 2015-03-29
  • 打赏
  • 举报
回复
引用 1 楼 zyq5945 的回复:
应该是你哪里写越界了,这个函数是不会出问题的。
运行的时候好像也是提醒越界,不过我不晓得哪里写越界了。
dext 2015-03-29
  • 打赏
  • 举报
回复
QString a; int i1, i2, i3; in >> a >> i1 >> i2 >> i3; 就搞定了吧, 你写的这么麻烦 是什么意思?
zyq5945 2015-03-28
  • 打赏
  • 举报
回复
应该是你哪里写越界了,这个函数是不会出问题的。

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧