当前位置: 代码迷 >> QT开发 >> Qt QString 中Split函数的使用有关问题
  详细解决方案

Qt QString 中Split函数的使用有关问题

热度:1221   发布时间:2016-04-25 02:58:30.0
Qt QString 中Split函数的使用问题
问题描述:在一个文件中存放着 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 ) ;


麻烦各位了!

------解决思路----------------------
应该是你哪里写越界了,这个函数是不会出问题的。
------解决思路----------------------
QString a;
int i1, i2, i3;

in >> a >> i1 >> i2 >> i3;

就搞定了吧,
你写的这么麻烦 是什么意思?
------解决思路----------------------
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();
}



------解决思路----------------------
明显不会,之所以会把5读成整数 是因为 你 第一个读的是字符,而不是字符串。
还有 直接 readAll 读会所有 然后 使用str.split(QRegExp("\\s+")) 也能解决问题。
你的思路极其混乱。

引用:
我写过这样写,但是结果是错的,把 5 读成了int 类型。往后的结果就读错了!
  相关解决方案