我正在尝试使用文件生成QWTspectrogram。有500个二进制文件来显示UI中的滑块的动画。该程序工作正常,但有时它给出"调试错误r6010 abort已被调用"任何随机场合的错误和崩溃我不知道为什么会出现这种情况,因为它是随机的,但它取决于滑块移动时fnum的变化但不是任何固定值或时间(它不会出现在静止状态)。下面是我的程序的代码
setAlpha随着UI滑块的变化而改变。
void Plot::setAlpha( int alpha )
{
fnum=alpha;
d_spectrogram->setData( new mydata(fnum,dial) );
d_spectrogram->attach( this );
replot();
}
class mydata: public QwtRasterData
{
typedef signed short int sBYTE;
char filepath[35];
sBYTE *fileBuf;
FILE *file = NULL;
public:
mydata(int fnum, int dial)
{
setInterval( Qt::XAxis, QwtInterval( 0, (area)-1 ) );
setInterval( Qt::YAxis, QwtInterval( 0, (area)-1 ) );
setInterval( Qt::ZAxis, QwtInterval( -dial, dial ) );
{
sprintf_s(filepath, "c:/mydata/uwpi%d.bin", fnum);
fopen_s(&file,filepath, "rb");
long fileSize = getFileSizex(file);
fileBuf = new sBYTE[fileSize];
fread(fileBuf, fileSize, 1, file);
fclose(file);
}
}
virtual double value( double x, double y ) const
{
int x_pos = static_cast<int>(x);
int y_pos = static_cast<int>(y);
const double c = (fileBuf[ ((x_pos)+((area-y_pos)*area))]);
return c;
}
}
答案 0 :(得分:0)
使用QFile,QDatasteam和QVector
解决感谢你现在的反应......
QFile myfile;
myfile.setFileName(“c:/file.bin”);
if(!myfile.open(QIODevice::ReadOnly)) return;
QDataStream data(&myfile);
data.setByteOrder(QDataStream::LittleEndian);
QVector<qint16> result;
while(!data.atEnd()) { qint16 x; data >> x; result.append(x);
}