自学qt一个月,最近想做个.dat文件可视化的qt界面,但是再读取.dat文件时界面总是崩溃,找了很多帖子,还没解决,希望有大佬帮我看看
//模型导入
void MainWindow::on_action_6_triggered()
{
QStringList title;
QColor color_surface;
QStringList StrListX,StrListY,StrListE,StrListPID,StrListID,list1,list2,List1;
StrListX.clear();
StrListY.clear();
StrListE.clear();
StrListPID.clear(); //定义变量
List.clear();
FileName_list1.clear();
foreach(QCustom3DItem *index,Items) //首先打开显示模块
{
graph3D->releaseCustomItem(index);
index->deleteLater();
}
color_surface=Qt::white;
Items.clear();
if(FileName_list1.isEmpty()==0) //判断FileName_list1是否包含项
{
QImage Image = QImage(2, 2, QImage::Format_RGB32);
FileName_list1 = QFileDialog::getOpenFileNames(this, tr("请选择模型文件!"),QDir ::currentPath());
QFileInfo fileInfo=QFileInfo(FileName_list1[0]);//构造一个新的QFileInfo,它是给定fileinfo的副本
int i=1;
QString aFileName1 = FileName_list1[0];
QFile aFile1(aFileName1); //命名一个文本 aFile1
QTextStream aStream1(&aFile1); //将aFile1的内容以流的形式传递
while(!aStream1.atEnd())
{
QString str=aStream1.readLine();//将文件流读取到对象
if(str.isEmpty()) //判断str是否包含项
{
}
else
{
str = str.simplified(); //从头到尾检查str
list1= str.split(' ', QString::SkipEmptyParts); //如果有‘ ’,则读取下一组数据
if(i==2) //判断list1有几组数据
{
title.append(list1);
}
if(i>2)
{
StrListPID.append(list1[0]);
StrListX.append(list1[1]);
StrListY.append(list1[2]);
StrListE.append(list1[3]);
}
}
list1.clear();
i++;
}
aFile1.close();
for(int j=1;j<=11238;j++) //将StrListX和StrListY循环打印在plainTextEdit
{
ui->plainTextEdit->appendPlainText(StrListX[j]);
ui->plainTextEdit->appendPlainText(StrListY[j]);
}
for(int i=0;i<11238;i++) //将StrListX和StrListY字符串转换成数值并赋值给x和y
{
x=StrListX[i].toFloat();
y=StrListY[i].toFloat();
z=0;
QCustom3DItem *item= new QCustom3DItem("meshes/sphereSmooth.obj",
QVector3D(x, z, y),QVector3D(0.003f, 0.003f,0.003f),QQuaternion::fromAxisAndAngle(0.0f, 0.1f, 0.0f, 45.0f),Image);
item->setShadowCasting(false);
Items.append(item);
}
foreach(QCustom3DItem *index,Items)
{
graph3D->addCustomItem(index);
}
int n,m=0;
QSurfaceDataArray *dataArray=new QSurfaceDataArray;
dataArray->reserve(GridNumy);
for (int i=0;i<GridNumy;i++) //将x,y循环描点,显示在界面上
{
QSurfaceDataRow *newRow=new QSurfaceDataRow(GridNumx);
int index=0;
for (int j=0;j<11238;j++)
{
n=m+(j*3);
x=List[n].toFloat();
y=List[n+1].toFloat();
z=0;
(*newRow)[index].setPosition(QVector3D(x,z,y));
index++;
}
*dataArray<<newRow;
m+=(GridNumx*3);
}
proxy1->resetArray(dataArray);
series1->setBaseColor(color_surface);
series1->setColorStyle(Q3DTheme::ColorStyleUniform);
}
}
连续几天没有进展,我去找了一些关于qt读取文件的帖子,试了一些读取文件的程序,也还是不行,然后有考虑是不是死循环了,做了一些修改,也还是没找出问题。
希望有哪位大佬看见,指出我的错误,不胜感激。
没有调试下是出现异常了吗 ?
我这里加载 *..obj 这样的模型文件时, 会出现索引超出边界的异常.
可能是QT不能兼容这样的文件格式, 主要是 f 开头的一些行